Дипломная работа: Разработка методики применения методов машинного обучения для решения маркетинговых задач в телекоммуникационном бизнесе

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

· AGREEMENT_NUMBER - Номер договора Клиента;

· DATE_IN_2 - Дата отклика 2 типа;

· DATE_IN_3 - Дата отклика 3 типа;

· CITY_NAME - Город;

· GROUP_TYPE - Тип группы (ЦГ, КГ).

2.2 Формирование производных показателей

При построении предиктивной модели важнейшую роль играет качество сформированных предикторов. Но для того, чтобы выявить наиболее значимые показатели, необходимо вывести как можно больше различных агрегаций для проверки значимости каждой фичи, после чего оставить только наиболее весомые признаки, чтобы не столкнуться с проблемой переобучения и не усложнить модель.

В процессе выполнения данной работы было сформировано 443 производных показателя на основе исходных данных. Ниже представлено описание производных признаков на примере 20 фичей:

· Отношение АРПУ услуги Телефония в текущем месяце к среднему АРПУ услуги Телефония в текущем месяце по всей ААБ;

· Отношение АРПУ услуги Телефония в текущем месяце к медиане АРПУ услуги Телефония в текущем месяце по всей ААБ;

· Отношение АРПУ услуги Телефония в текущем месяце к моде АРПУ услуги Телефония в текущем месяце по всей ААБ;

· АРПУ услуги Телефония в текущем месяце выше среднего АРПУ услуги Телефония в текущем месяце по всей ААБ (флаговая переменная);

· АРПУ услуги Телефония в текущем месяце выше медианы АРПУ услуги Телефония в текущем месяце по всей ААБ (флаговая переменная);

· АРПУ услуги Телефония в текущем месяце выше моды АРПУ услуги Телефония в текущем месяце по всей ААБ (флаговая переменная);

· Отношение АРПУ Суммарно по всем услугам в текущем месяце к АРПУ Суммарно по всем услугам в предыдущем месяце;

· Отношение АРПУ Суммарно по всем услугам в текущем месяце к среднему АРПУ Суммарно по всем услугам за последние 3 месяца, не включая текущий;

· Отношение АРПУ Суммарно по всем услугам в текущем месяце к среднему АРПУ Суммарно по всем услугам в текущем месяце по всей ААБ;

· Отношение АРПУ Суммарно по всем услугам в текущем месяце к медиане АРПУ Суммарно по всем услугам в текущем месяце по всей ААБ;

· Отношение АРПУ Суммарно по всем услугам в текущем месяце к моде АРПУ Суммарно по всем услугам в текущем месяце по всей ААБ;

· АРПУ суммарно по всем услугам в текущем месяце выше среднего АРПУ Суммарно по всем услугам в текущем месяце по всей ААБ (флаговая переменная);

· АРПУ суммарно по всем услугам в текущем месяце выше медианы АРПУ Суммарно по всем услугам в текущем месяце по всей ААБ (флаговая переменная);

· АРПУ суммарно по всем услугам в текущем месяце выше моды АРПУ Суммарно по всем услугам в текущем месяце по всей ААБ (флаговая переменная);

· Доля АРПУ услуги Дои.ru TV от суммарного АРПУ в текущем месяце (аналогично - для предыдущего и пред-предыдущего месяцев);

· Доля АРПУ услуги Интернет от суммарного АРПУ в текущем месяце (аналогично - для предыдущего и пред-предыдущего месяцев);

· Доля АРПУ услуги Телефония от суммарного АРПУ в текущем месяце (аналогично - для предыдущего и пред-предыдущего месяцев);

· Доля АРПУ услуги КТВ от суммарного АРПУ в текущем месяце (аналогично - для предыдущего и пред-предыдущего месяцев);

· Повышение доли АРПУ услуги Телеком TV не менее чем на 10 п.п. относительно предыдущего месяца;

· Повышение доли АРПУ услуги Интернет не менее чем на 10 п.п. относительно предыдущего месяца.

2.3 Определение наиболее значимых предикторов

После формирования максимального количества производных показателей следует приступить к отбору наиболее значимых показателей. Как и дальнейшее построение модели, feature selection (отбор предикторов) будет производиться с использованием языка Python и процедурным расширением структурированного языка запросов PL/SQL, разработанного корпорацией Oracle [37, с. 13].

Для того, чтобы оценить значимость показателей, будет использован модуль feature_selection.SelectKBest (f_classif) библиотеки sklearn, который сортирует показатели по значимости в зависимости от проверки F-критерия Фишера - параметрического критерия, используемого для сравнения дисперсий двух вариационных рядов [38, с. 238].

Для реализации алгоритма сначала необходимо импортировать необходимые для работы библиотеки. Процесс импорта с кратким описанием представлен на Рисунке 38:

Рисунок 38 Импорт библиотек для отбора предикторов

Затем необходимо произвести подключение к витринам данных и загрузить необходимую информацию в рабочую среду. Процесс подключения и загрузки с комментариями представлен на Рисунке 39:

Рисунок 39 Подключение к витринам данных и загрузка информации

Далее необходимо произвести некоторые преобразования данных: сэмплирование (выделение подвыборки из основной выборки, Рисунок 40), формирование dummy-переменных на основе категориальных признаков (Рисунок 41), формирование пользовательской функции для расчета выборочного среднего по количественной переменной (Рисунок 42) и замена пустых значений на средние (Рисунок 43):

Рисунок 40 Выделение подвыборки из основной выборки

Рисунок 41 Формирование dummy на основе категориальных признаков

Рисунок 42 Создание пользовательской функции для расчета выборочного среднего

Рисунок 43 Замена пустых значений на средние

Затем можно приступать к обучению классификатора для выделения наиболее значимых показателей с использованием F-критерия Фишера (Рисунок 43). Выделяются 40 наиболее значимых показателей.

Рисунок 43 Обучение классификатора

Следующим шагом идет сохранение предикторов в файл формата.csv (Рисунок 44):

Рисунок 44 Сохранение предикторов

Полный скрипт отбора предикторов представлен в Приложении 1.

Перечень наиболее значимых предикторов, полученных в процессе отбора, представлен на Рисунке 45:

Рисунок 45 Наиболее значимые предикторы для модели

Выводы

В Главе 2 было дано описание витрин данных, созданных для моделирования. Были описаны сущности, атрибуты и их назначение. Было дано общее описание формирования таблиц с предикторами с примерами показателей, подробно описан процесс отбора наиболее значимых фич, а также указаны основные переменные, задействованные в модели.

3. Построение предиктивной модели

3.1 Описание используемого алгоритма

Как было отмечено ранее, для построения предиктивной модели в данной работе используется метод градиентного бустинга (будем использовать частный случай алгоритма - градиентный бустинг над решающими деревьями, то есть в качестве базового алгоритма будут использованы именно decision trees). Но для того, чтобы построить качественную модель, необходимо более глубоко разобраться в используемом алгоритме.

Итак, одно из возможных применений данного метода - решение задач бинарной классификации (то есть результирующий вектор ответов состоит только из 0 и 1). Если произвести описание более научным языком, то сформулировать задачу можно следующим образом: существует набор данных (yi, xi), при этом xi - это векторы в n-мерном числовом пространстве, а yi - возможные значения целевой переменной (множество {0, 1}). В рамках решения задачи необходимо восстановить распределение вероятностей Py (x) принадлежности целевой переменной y к классу 0 или 1 [39, с. 132-145].

В том случае, если известна вероятность принадлежности переменной вероятность принадлежности переменной y к классу 0 (Py=0 (x)), то вероятность принадлежности целевой переменной к классу 1 рассчитывается по формуле: Py=1 (x) = 1 - Py=0 (x).

В данном случае в качестве базового семейства алгоритмов рассматриваются регрессионные решающие деревья из J вершин [40, с. 99-103]. Здесь не важны методы построения самих деревьев, но важен тот факт, что каждое решающее дерево имеет J листовых вершин, соответствующие J непересекающимся областям , на которые разбивается пространство объектов X. Каждой листовой вершине соответствует некоторое значение регрессии , которое будет ответом классификатора в случае попадания анализируемого объекта в соответствующую область. Данный факт описывается формулой:

где I[A] - индикатор события A. Видно, что в данной сумме ровно одно слагаемое будет ненулевым. Тогда добавление слагаемого в градиентном бустинге будет происходит следующим образом:

[41, с. 4].

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

И, поскольку области не пересекаются, можно переписать формулу в следующем виде:

Таким образом, вместо того, чтобы выполнять линейный поиск коэффициента перед новым слагаемым, как в классическом градиентном бустинге [40, с. 110], мы полностью перенастраиваем параметры дерева с фиксированным . Это позволяет строить более качественную композицию.

Если в бустинге над регрессионными деревьями взять LAD функцию потерь, то оптимальные параметры деревьев примут следующий вид:

.

Данный алгоритм является достаточно устойчивым к шуму: во-первых, принимает только значения {+1, -1}, а во-вторых, обновление параметров происходит за счет взятия медианных значений, а медианы устойчивы к выбросам. Также данный алгоритм обладает высокой скоростью работы за счет быстрого подбора параметров.

На Рисунке 46 представлена визуализация работы алгоритма решающих деревьев, принятого в качестве базового при построении бустинга:

Рисунок 46 Пример построения решающего дерева в двумерном пространстве признаков

На Рисунке 47 представлен пример построения градиентного бустинга при решении задачи бинарной классификации:

Рисунок 47 Пример работы градиентного бустинга

Зная, что лежит в основе алгоритма градиентного бустинга над решающими деревьями, следует переходить непосредственно к разработке модели. Отметим, что для этого будет использована среда разработки Jupyter Notebook с поддержкой языка Python 3 (данные продукты входят в поставку Anaconda вместе с библиотеками Python, оптимизированным для анализа данных).

3.2 Разработка предиктивной модели

Итак, после создания базы данных, завершения процесса формирования таблиц с предикторами, а также подробного разбора теории следует перейти непосредственно к разработке предиктивной модели для прогнозирования склонности абонентов к приобретению дополнительной услуги «Дополнительный пакет каналов Viasat Premium HD».

Прежде всего, необходимо импортировать нужные для работы библиотеки (Рисунок 48):

Рисунок 48 Импорт библиотек с комментариями

Затем следует импортировать данные (в нашем случае - таблицы с предикторами) в оперативную память, с целью обеспечения постоянной доступности выборок для работы с ними. Данные будут выгружаться в 2 этапа: определение запроса на выгрузку (Рисунок 49), выгрузка данных по запросу. Для реализации второго шага будут использованы библиотеки CxOracle (подключение к витринам данных на базе Oracle) и Pandas (загрузка данных из витрин в pandas DataFrame) для Python. Загрузка датасета представлена на Рисунке 50:

Рисунок 49 Определение запроса для выгрузки данных за март 2017

Рисунок 50 Подключение к БД, выгрузка данных в DataFrame df201703

Следует отметить, что обучение модели было реализовано на 3-месячном срезе данных (март 2017 - май 2017), а тестирование - на двух следующих месяцах (июнь, июль 2017). Выгрузка данных за указанные временные промежутки реализована описанным выше способом.

Так как в нашем случае имеется несбалансированная выборка (записей с целевой меткой класса 1 почти в 1000 раз меньше записей с целевой меткой класса 0), то по окончании импорта данных для обучающей выборки необходимо произвести undersampling - уменьшение размерности выборки с целевой меткой класса 0 для получения более сбалансированной выборки (Рисунок 51):

Рисунок 51 Undersampling обучающей выборки

После балансировки выборки необходимо провести обработку выбросов и экстремальных значений. Для этого используем подход, описанный ниже (Рисунок 52):

Рисунок 52 Подход к обработке выбросов и экстремальных значений

Здесь:

Q25 - первый квартиль;

Q50 - медиана;

Q75 - третий квартиль;

Min - наименьшее значение выборки;

Max - наибольшее значение выборки;

IQR - интерквартильный размах (Q75 - Q25).

Выбросы и экстремальные значения:

Q25 - 1.5 IQR < X < Q75 + 1.5 IQR [42, с. 25].

В соответствии с данным подходом была разработана функция, возвращающая вещественный DataFrame без выбросов и экстремальных значений (Рисунок 53):

Рисунок 53 Функция для обработки выбросов и экстремальных значений

После обработки выбросов необходимо проработать пустые значения. Подавляющая часть пропусков заполняться не будет, так как градиентный бустинг предусматривает построение отдельных ветвей для пропущенных значений, что значительно облегчает задачу обработки. Однако, для некоторых атрибутов требуется заменить пропуски на значение 30, так как они отражают количество дней в предыдущем месяце без пользования услугой. Пустое значение возвращается в том случае, когда услуга не была подключена иными словами, весь месяц Абонент не пользовался услугой. Блок обработки пустых значений представлен на Рисунке 54:

Рисунок 54 Обработка пропущенных значений

После обработки пропусков необходимо произвести обработку категориальных признаков, сформировав dummy-переменные (Рисунок 55):

Рисунок 55 Формирование dummy-переменных

После формирования dummy необходимо убрать лишние значения (Рисунок 56):

Рисунок 56 Очистка значений категориальных признаков

Источник: https://otherreferats.allbest.ru/download/1003541/