Як ми вчимо машинного навчання та аналізу даних в «Білайн»



Після тривалої підготовки, підборки матеріалу і попередніх апробацій курсу 19 жовтня ми запустилися. Корпоративний інтенсивний практичний курс аналізу даних від експертів цієї справи. На даний момент у нас пройшло 6 занять, половина нашого курсу, і це короткий огляд того, що ми на них робимо.

Перш за все, нашим завданням було створити курс, на якому ми дамо максимум практики, яку слухачі відразу зможуть застосовувати у щоденній роботі.

Ми часто бачили, як люди, які приходять до нас на співбесіди, незважаючи на непогане знання теорії, через брак досвіду не могли відтворити всі етапи розв'язання типової задачі машинного навчання – підготовка даних, відбір/конструювання ознак, вибір моделей, їх правильна композиція, досягнення високої якості і правильне трактування отриманих результатів.

Тому у нас головне – це практика. Відкриваємо зошити IPython і відразу з ними працюємо.

На першому занятті ми обговорили дерева і лісу рішень і розібрали техніку вилучення ознак на прикладі набору даних змагання Kaggle «Titanic: Machine Learning from Disaster».

Ми вважаємо, що участь у змаганнях з машинного навчання обов'язково для підтримки необхідного рівня та постійного підвищення експертизи аналітика. Тому, починаючи з першого заняття ми запустили власне змагання з передрікання виплат в автострахуванні (зараз дуже популярна в бізнесі тема) з допомогою Kaggle Inclass. Змагання триватиме до закінчення курсу.

На другому занятті ми займалися аналізом даних Titanic, використовуючи Pandas та засоби візуалізації. Також спробували прості методи класифікації на завданні з передрікання виплат в автострахуванні.

На третьому занятті розглянули завдання Kaggle «Greek Media Monitoring Multilabel Classification (WISE 2014)» змішування і застосування алгоритмів як основний методики для більшості змагань Kaggle.

На третьому занятті ми також розглянули можливості бібліотеки машинного навчання Scikit-Learn, а потім детальніше — лінійні методи класифікації: логістичну регресію і лінійний SVM, обговорили, коли краще застосовувати лінійні моделі, а коли — складні. Поговорили про важливість ознак у задачі навчання і про метриках якості класифікації.

Головною темою четвертого заняття став алгоритм мета-навчання стекінг і його застосування в переможному вирішенні завдання Kaggle компанії Otto «Classify into products correct category».

На четвертому занятті ми підібралися до головної проблеми машинного навчання – боротьбі з перенавчанням, подивилися, як для цього використовувати криві навчання та валідації, як правильно проводити крос-валідацію, які показники можна оптимізувати в цьому процесі для досягнення кращої узагальнюючої здатності. Також вивчили методи побудови ансамблів класифікаторів і регрессоров – бэггинг, метод випадкових подпространств, бустинг, стекінг та ін

І так далі – кожне заняття нова практичне завдання.

Так як нашим основним мовою на курсі є Python, то ми, звичайно, знайомимо з основними бібліотеками аналізу даних на мові Python — NumPy, SciPy, Matplotlib, Seaborn, Pandas і Scikit-learn. Ми приділяємо цьому досить багато часу, оскільки робота дослідника даних багато в чому складається з виклику різних методів перерахованих модулів.

Розуміння теорії, на якій засновані методи також важливо. Тому ми розглянули основні математичні методи, реалізовані в SciPy — знаходження власних чисел, сингулярне розкладання матриці, метод максимальної правдоподібності, методи оптимізації та ін Ці методи були розглянуті не просто теоретично, а у зв'язці з алгоритмів машинного навчання, їх використовують – методом опорних векторів, логістичної регресією, спектральної кластеризацией, методом головних компонент та ін Такий підхід – спочатку практика, потім теорія, нарешті, практика на новому рівні, з теоретичним розумінням – реалізований багатьма школами машинного навчання за кордоном.

Розглянемо трохи детальніше один з популярних методів, часто застосовуваний учасниками змагань Kaggle – стекінг, який ми вивчали на четвертому занятті.

У найпростішій формі ідея стекинга полягає в тому, щоб взяти M базових алгоритмів (наприклад, 10), розбити навчальну вибірку на дві частини — скажімо, А і В. Спочатку навчити на частини A M базових алгоритмів і зробити передбачення для частини B. Потім навпаки, навчити всі моделі на частини B і зробити прогнози для об'єктів з частини A. Так можна отримати матрицю передбачень, розміри якої n x M, де n — кількість об'єктів у вихідній навчальної вибірки, M — число базових алгоритмів. Ця матриця подається на вхід ще однієї моделі — моделі другого рівня, яка, фактично, навчається на результатах навчання.



Частіше схему роблять трохи складніше. Щоб навчати моделі на більшій кількості даних, ніж половині навчальної вибірки, вибірку K разів розбивають на K частин. Моделі навчають на K-1 частинах навчальної вибірки, прогнози роблять на одній частині і вносять результати в матрицю передбачень. Це K-кратний стекінг.



Розглянемо схему переможців змагання Kaggle «Otto Group Product Classification Challenge». www.kaggle.com/c/otto-group-product-classification-challenge
Завдання полягало у правильному віднесення товарів до однієї з 9 категорій на основі 93 ознак, суть яких компанія Otto не розкриває. Передбачення оцінювалися на основі середньої F1-заходи. Змагання стало найпопулярнішим за всю історію Kaggle, можливо, тому що поріг входу був низьким, дані добре підготовлені, можна було швидко взяти і спробувати одну з моделей.

У вирішенні переможців змагання використовувався по суті той же K-кратний стекінг, тільки на другому рівні навчалися три моделі, а не одна, і потім передбачення цих трьох моделей змішувалися.



На першому рівні навчалися 33 моделі — різні реалізації багатьох алгоритмів машинного навчання з різними наборами ознак, у тому числі створеними.

Ці 33 моделі 5 разів навчалися на 80% навчальної вибірки і робили передбачення для решти 20% даних. Отримані передбачення збиралися в матрицю. Тобто 5-кратний стекінг. Але на відміну від класичної моделі стекинга ще в тому, що до пророкувань 33 моделей додалися 8 створених ознак — в основному отримані кластеризацией вихідних даних (та сама ознака — мітки отриманих кластерів) або враховують відстані до найближчих представників кожного класу.

На результатах навчання 33 моделей першого рівня і 8 створених ознаках навчалися 3 моделі другого рівня — XGboost, нейронна мережа Lasagne NN і AdaBoost з деревами ExtraTrees. Параметри кожного алгоритму підбиралися в процесі крос-валідації. Фінальна формула для усереднення пророкувань моделей другого рівня підбиралася також у процесі крос-валідації.

На п'ятому занятті ми продовжили вивчати алгоритми класифікації, а саме, нейронні мережі. Також торкнулися теми навчання без учителя – кластеризацію, зниження розмірності і пошук викидів.

На шостому занятті ми занурилися в Data Mining і аналіз споживчого кошика. Поширена думка що машинне навчання і майнінг даних — це одне і те ж або що останнє — частина першого. Ми пояснюємо, що це не так і вказуємо на відмінності.

Спочатку машинне навчання було більш націлене на передбачення типу нових об'єктів на основі аналізу навчальної вибірки, і саме про завдання класифікації найчастіше згадують, коли говорять про машинне навчання.

Майнінг даних був орієнтований на пошук «цікавих» закономірностей (патернів) в даних, наприклад, часто купуються разом товарів. Звичайно, зараз ця грань стирається, і ті методи машинного навчання, які працюють не як чорний ящик, а видають і інтерпретовані правила, можуть бути використані і для пошуку закономірностей.

Так, дерево рішень дозволяє зрозуміти не тільки те, що дана поведінка користувача схоже на фрод, але і чому. Такі правила нагадують асоціативні правила, однак у майнинге даних вони з'явилися для аналізу продажів, адже корисно знати, що, здавалося б, не пов'язані між собою товари купуються разом. Купивши A купують і B.

Ми не тільки про все це розповідаємо, але і даємо можливість самим проаналізувати реальні дані про таких покупках. Так дані про продажі контекстної реклами допоможуть зрозуміти які рекомендації про покупку пошукових словосполучень давати тим, хто хоче просувати свій онлайн магазин в мережі.

Інший важливий в майнинге даних метод — це пошук частих послідовностей. Якщо послідовність <ламінат, холодильник> досить часта, то швидше за все у вашому магазині закуповуються новосели. А ще такі послідовності корисні для передбачення наступних покупок.

Окреме заняття присвячене рекомендаційним систем. Ми не тільки навчаємо класичними алгоритмами колаборативної фільтрації, але і розвіювати міфи про те, що SVD, стандарт де-факто в цій області, — панацея для всіх рекомендаційних завдань. Так, в задачі рекомендації радіостанцій, SVD помітно перенавчається, а досить природний гібридний підхід колаборативної фильтрациии за подібністю користувачів і динамічних профілів користувачів і радіостанцій на основі тегів чудово працює.

Отже, минуло шість занять, що далі? Далі – більше. У нас буде аналіз соціальних мереж, ми будемо з нуля будувати рекомендаційну систему, вчити обробці і порівнянні текстів. Також, звичайно, у нас буде аналіз Великих даних за допомогою Apache Spark.

Ще ми приділимо окреме заняття хитрощів і трюків на Kaggle, про які розповість людина, що займає зараз 4 місце в світовому рейтингу Kaggle.

З 16 листопада ми запускаємо другий курс для тих, хто не зміг потрапити на перший. Подробиці, як завжди, на bigdata.beeline.digital.

За хронікою занять поточного курсу можна стежити на сторінці Facebook.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.