Big Data у Білайні реальний досвід

Привіт, хабре! Мене звуть Олександр Крот, я відповідаю за розробку алгоритмів машинного навчання та інтелектуального аналізу даних у компанії Білайн, а також за підготовку та відбір фахівців по роботі з даними під керівництвом Сергія Марина, який раніше знайомив Вас із роботою нашого підрозділу Big Data. Я вже писав про окремі аспекти Big Data та 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)
Завдання прогнозування (Predictive Modeling)
Завдання класифікації у класичній постановці виглядають просто. Є набір об'єктів, скажімо, абонентів та безліч ознак, що їх описують. З усієї множини об'єктів є невелика група, для кожного об'єкта з якої відомо значення цільової змінної, наприклад, ймовірність того, що абонент схильний піти у відтік або схильний зробити ту чи іншу цільову дію. Це так звана навчальна вибірка. Завдання полягає у передбаченні значення цільової ознаки для решти всіх об'єктів. Типове завданнярегресії(коли передбачуваним значенням є деяке число) абокласифікації(коли передбачуваним значенням є деяка мітка). Серед прикладів розв'язуваних нами завдань, окрім завдання прогнозування відтоку, можна виділити завдання передбачення статі абонента, віку, схильності до споживання конкретних послуг, таких, як Shared Data Bundle. Все це використовується, наприклад, для таргетованих пропозицій власних послуг оператора. Тут ми активно використовуємо лінійні моделі, дерева рішень, нейронні мережі, і навіть композиції алгоритмів (наприклад, бустинг). Серед інструментів – Python з його бібліотеками або, у разі навчання на великих даних, Apache Spark чи Vowpal Wabbit.
Завдання кластеризації (Cluster Analysis)
Це далеко не повний перелік завдань, якими ми займаємось у рамках інтелектуального аналізу даних компанії Білайн. Весь перелік складно описати в одній статті, детальніше про окремі завдання я розповім пізніше.