Трохи про лабораторії Data Science в Білайні



Привіт, хабр! Мене звуть Олександр Крот, я відповідаю за розробку алгоритмів машинного навчання та інтелектуального аналізу даних в компанії Білайн, а також за підготовку та відбір фахівців по роботі з даними під керівництвом Сергія Марина, який раніше знайомив Вас з роботою нашого підрозділу Big Data. Я вже писав про окремі аспекти Big Data і Machine Learning, але сьогодні я розповім, як це влаштовано на практиці, а саме — як ми в Білайн вирішуємо завдання, пов'язані з аналізом великих даних, як відбираємо фахівців, які інструменти та методи застосовуємо на практиці.

Хто ми
Почнемо з того, що у нас є лабораторія, в якій працюють фахівці — так звані Data Scientist's — люди, яких на ринку знайти дуже складно. До нас на співбесіду приходить багато людей, лише одиниці з яких залишаються працювати у нас.
Процес починається з телефонного інтерв'ю з питаннями по деяких розділах математики. Після кандидата чекає тестова задача — конкретне завдання машинного навчання, аналогічна завданням на kaggle.com. Побудувавши хороший алгоритм і отримавши високе значення метрики якості на тестовій вибірці, кандидат допускається до наступного етапу безпосередньої співбесіди, на якому перевіряється знання методів машинного навчання та аналізу даних, а також задаються нетривіальні питання з практики та завдання на логіку. Ідеальний портрет кандидата — це випускник МФТІ, МДУ, ШАД, учасник змагань ACM та Kaggle з обов'язковим практичним досвідом побудови алгоритмів машинного навчання та аналізу даних (телеком, банки, ритейл). Плюсом є досвід застосування методів Large Scale Machine Learning, тобто побудови алгоритмів машинного навчання, у разі коли доводиться навчатися на дуже великих даних, які не поміщаються в оперативну пам'ять машини.

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

Збір даних

Як правило, коли завдання вже поставлено і зрозумілий приблизний вектор даних, які потрібні для вирішення задачі, починається процес збору та агрегації. Це так званий ETL (Extract Transform Load) процес. На перший погляд цей крок може здатися тривіальним, але на практиці це далеко не так. Доводиться вивантажувати велика кількість не пов'язаних між собою даних, чистити їх і об'єднувати.
На практиці в даних можуть бути перепустки, можуть бути некоректні значення. Ускладнюється все ще й тим, що ми працюємо з даними з багатьох джерел (біллінг, геодані, інтернет-події, дані про якість сервісу, CRM, дані про поповнення та списання, підключені тарифи і послуги та багато іншого), і щоб об'єднати дані між собою (та, наприклад, виконати всім відому операцію join), необхідно занести дані в єдине сховище, і перш ніж запустити процес об'єднання, потрібно добре подумати, як зробити запит так, щоб він був максимально ефективним з точки зору обчислювальної складності. Саме тут необхідний навик ефективної реалізації алгоритмів.
На даному етапі використовуються такі інструменти, як Hive, Pig (для простих запитів), Apache Spark (для більш складних запитів). У цьому пункті важливо відзначити одну особливість: часто в задачах машинного навчання (наприклад, в задачах класифікації чи регресії) необхідна так звана навчальна вибірка — набір об'єктів, цільова (предсказываемая) змінна яких вже відома. На практиці знайти хорошу і велику навчальну вибірку (докладніше про яку я розповім нижче) у багатьох завданнях дуже складно — доводиться спочатку добувати набір навчальних об'єктів шляхом вирішення допоміжних завдань.

Побудова алгоритму

Після того, як усі дані зібрані, починається процес побудови алгоритму, який включає в себе безліч етапів. Для початку з усіх даних береться деяка невелика частина — така, яка поміщається в оперативній пам'яті звичайного персонального комп'ютера. У цей момент задіюються всі навички, які фахівці застосовують при вирішенні завдань на Kaggle. А саме: шляхом експериментів Data Scientist вирішує, як будуть заповнювати пропущені значення даних, робить відбір і створення ознак , , тестує безліч алгоритмів , підбирає всі необхідні параметри, а також вирішує безліч більш дрібних допоміжних завдань. Після завершення даного етапу, як правило, є готовий прототип майбутнього алгоритму. Тут використовуються такі інструменти аналізу даних, як R або Python зі всілякими бібліотеками (наприклад, scikit-learn або pandas). Важливо відзначити, що всі кроки при побудові алгоритму оформляються в докладний звіт за допомогою IPython Notebook (RMarkdown відповідно).

Масштабування алгоритму. Навчання на великих даних

Далі, як готовий прототип алгоритму, як правило, відбувається процес навчання на великих даних — запускається навчання вибраного на попередньому етапі алгоритму на більшому обсязі даних. Для цього використовуються інструменти для роботи з великими даними — Apache Spark і Vowpal Wabbit. Перший з них дозволяє ефективно реалізувати повторне алгоритми машинного навчання і алгоритми на графах завдяки ефективній моделі обчислень в оперативній пам'яті. Другий — реалізувати онлайн-навчання так званих лінійних моделей на великих даних, не завантажуючи всі дані в оперативну пам'ять взагалі. Варто відзначити зростаючу популярність останніх інструментів, а також те, що вони, як і всі попередні, є вільно поширюваними (а значить, на практиці, як правило, вимагають суттєвого доопрацювання для промислового застосування).

Варто відзначити, що це далеко не єдиний можливий процес рішення задачі. Найчастіше алгоритми відразу навчаються на великих даних, або сама задача припускає тільки грамотне витяг і агрегацію даних (тобто являє собою чистий ETL-процес). Також часто у нас вирішуються задачі на графах, про приклади і методи вирішення яких я розповідав раніше. В цілому в більшій частині процес виглядає так, як описано вище. Середній час від народження ідеї до реалізації продуктивного рішення становить від декількох днів до місяця (з урахуванням всілякого тестування, оптимізації і поліпшення якості алгоритмів).

Які завдання ми вирішуємо
Я опишу лише завдання, якими займаюся безпосередньо, в той же час є інші не менш цікаві завдання, наприклад геоаналитики, в яких використовуються більш прості алгоритми, але потрібно, наприклад, якісна візуалізація.
Отже, ми вирішуємо наступні завдання машинного навчання та інтелектуального аналізу даних:

Завдання обробки природної мови (Natural Language Processing)

Обробка природної мови і текстів є одним з найбільш складних розділів інтелектуального аналізу даних в даний час — нарівні з обробкою зображень і сигналів. В цьому місці ми використовуємо як класичні алгоритми і текстові ознаки зразок мішка слів (Bag of Words) або TF-IDF, так і більш просунуті методи глибокого навчання Deep Learning (наприклад, активно використовуємо структуру даних word2vec для пошуку синонімів слів), які при істотних розмірах навчальної вибірки виявляються набагато ефективнішими в задачах класифікації текстів (і використовуються для боротьби зі спамом). З інструментів тут ми використовуємо різні бібліотеки зразок NLTK (Natural Language Toolkit) і вже реалізовані алгоритми в Apache Spark.

Задачі на графах (Social Network Analysis)

Ми також займаємося завданнями аналізу мереж — так званих графів. Докладно про це я розповідав раніше , тому зараз лише коротко нагадаю, що граф — це множина об'єктів, між якими відомі зв'язку. Або, говорячи простою мовою, це безліч точок (вершин), з'єднаних відрізками (ребрами). Типові графи — це соціальні мережі, де між об'єктами визначено поняття дружби, чи граф Інтернету, в якому є сайти, які посилаються один на одного. У графах можна виділяти спільноти, обчислювати, вважати їх різні характеристики, і навіть пророкувати нові знайомства між людьми. Т. к. задачі на графах дуже вимогливі до ресурсів, тут ми використовуємо Apache Spark, в якому вже реалізована частина відомих алгоритмів, таких як пошук сильно зв'язних компонент (Strongly Connected Components) або PageRank. Однак часто цього недостатньо, і ми використовуємо інші інструменти, які використовують більш звичну модель обчислень Pregel.

Завдання прогнозування (Predictive Modeling)

Задачі класифікації в класичній постановці виглядають просто. Є набір об'єктів, скажімо, абонентів і безліч ознак, що їх описують. З усього безлічі об'єктів є невелика група, для кожного об'єкта з якої відомо значення цільової змінної, наприклад, ймовірність того, що абонент схильний піти у відтік або схильний зробити те чи інше цільове дію. Це так звана навчальна вибірка. Завдання полягає в передбаченні значення цільового ознаки для всіх інших об'єктів. Типова задача регресії (коли предсказываемым значенням є деяке число) або класифікації (коли предсказываемым значенням є певна мітка). Серед прикладів вирішуваних нами завдань, крім задачі прогнозування відтоку, можна виділити завдання передбачення статі абонента, віку, схильності до споживання конкретних послуг, таких, наприклад, як Shared Data Bundle. Все це використовується, наприклад, для націлених пропозицій власних послуг оператора. Тут ми активно використовуємо лінійні моделі, дерева рішень, нейронні мережі, а також композиції алгоритмів (наприклад, бустинг). Серед інструментів — Python з його бібліотеками або, в разі навчання на великих даних, Apache Spark або Vowpal Wabbit.

Задачі кластеризації (Cluster Analysis)

Задачі кластеризації, на відміну від завдань прогнозування, не мають навчальної вибірки. Типова постановка таких задач полягає в пошуку закономірностей в нерозмічених даних. Єдине, що є на вході в такій задачі, — це набір об'єктів і відомих для них ознак. В рамках задачі необхідно відповісти на питання: поділяються об'єктів на кластери, всередині кожного об'єкти з яких дуже схожі один на одного? За допомогою цього ми регулярно сегментируем абонентську базу з метою знаходження користувачів, в деякому сенсі схожих один на одного. Ми виділяємо людей, які становлять певне соціальне співтовариство. Після цього вивчаємо інтереси і особливості конкретної групи за допомогою завдань прогнозування, описаних вище. Тут ми використовуємо як класичні алгоритми начебто KMeans, так і більш просунуті алгоритми ієрархічної кластеризації та кластеризації на графах.

Це далеко не повний перелік завдань, якими ми займаємося в рамках інтелектуального аналізу даних компанії Білайн. Весь перелік складно описати в одній статті, докладніше про окремих завданнях я розповім пізніше.

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

0 коментарів

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