Помимо основных докладов и дополнительных форумов, Data Con LA также предлагала учебные пособия, в которых инструкторы обучали энтузиастов темам, связанным с данными. В этом году были предложены две разные темы — блокчейн и наука о данных. Поскольку я скоро буду аспирантом в области науки о данных, я, конечно же, посетил учебник по науке о данных, чтобы получить некоторый практический опыт до начала моего семестра.

Наука о данных и машинное обучение

Зия Хан начал с того, что заявил, что урок, который преподают сегодня, не требует никакого предварительного опыта программирования. Затем он представил классу концепцию больших данных и искусственного интеллекта. Интересной вещью, о которой он рассказал, был цикл ажиотажа Gartner за 2018 год. Мы могли видеть, что глубокое обучение находится в зените кривой (оно остается на этом месте и для цикла шумихи 2019 года).

Наука о данных существует уже некоторое время, но почему наука о данных только сейчас стала предметом обсуждения в последние несколько лет? Инструктор объясняет, что это потому, что хранение данных в настоящее время очень просто и дешево (иногда даже дешевле, чем удаление данных). Более того, более быстрый компьютер и Интернет позволили нам обрабатывать сохраненные данные с огромной скоростью.

Специалист по данным сегодня — это человек с комбинацией навыков, составляющих роль.

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

Затем инструктор перевел тему на машинное обучение и продемонстрировал, что существует два основных типа машинного обучения: контролируемое и неконтролируемое.

В процессе контролируемого машинного обучения обучающие данные помечены и часто имеют цель (на основе исторических данных). Классификация (категориальные данные) и регрессия (числовые данные) — это два типа задач, для которых используется контролируемое обучение.

С другой стороны, неконтролируемое обучение происходит, когда нет помеченных обучающих данных — проблемы кластеризации попадают в эту категорию (без переменной типа).

Далее инструктор рассказал о цели сегодняшнего дня — прогнозировать отток клиентов. Бизнес-цель этой цели состоит в том, чтобы выяснить, кто рискует уйти, поэтому компания может предотвратить это, раздавая рекламные акции или сделки. Для этого мы будем использовать модель машинного обучения с контролируемой классификацией для решения проблемы.

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

Задание

Задача этого руководства — помочь Sprint спрогнозировать скорость оттока клиентов, чтобы клиенты не уходили.

Во-первых, мы импортировали две библиотеки: pandas для вычислений и matplotlib для визуализации. Мы также читаем файл данных csv из нашей библиотеки.

Данные имеют 3333 строки и 21 столбец. Набрав функцию .head, мы можем наблюдать за первыми 5 строками данных и видеть, правильно ли мы прочитали файл:

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

Выполняя некоторые проверки, такие как просмотр уникальных наборов данных в категории «Состояние» и подсчет всех появлений этих состояний, мы можем внимательно изучить, как разные состояния составляют данные.

Не было ни одного штата, в котором общее количество клиентов было бы настолько большим, что оно превосходило бы другие штаты, поэтому мы можем продолжить наш анализ.

Затем мы выполнили числовую аналитику данных, чтобы увидеть некоторую статистику данных:

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

Затем мы рассмотрели линейную корреляцию каждой переменной. Мы также сделали «Отток» зависимой переменной, а другие переменные независимыми, чтобы увидеть, насколько каждая переменная влияет на уровень оттока.

Как видно из приведенных выше результатов, самым большим линейным фактором, влияющим на «отток», является международный план. Однако линейные корреляции были небольшими, поэтому нелинейная зависимость, вероятно, диктует, как отток может быть смоделирован другими переменными. Кроме того, руководствуясь здравым смыслом, количество сделанных звонков клиентов и длина счета в месяцах, вероятно, являются двумя основными факторами, которые мы могли бы использовать для показателей оттока — мы попытаемся использовать эти переменные для нашей первой модели.

Затем, используя matplotlib для некоторых визуализаций, мы могли лучше рассмотреть наши данные:

Мы видим, что длина счета нормально распределена. График зависимости от оттока дает следующее:

На графике нет четкой связи между оттоком и длиной учетной записи, как и для вызовов CustServ:

Затем мы попытались увидеть, показывают ли другие факторы четкую закономерность при построении графика с оттоком, но безуспешно:

Построив трехмерный график с длиной учетной записи, вызовы CustServ и отток по-прежнему не показали закономерностей:

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

Создание зависимой переменной Churn, в то время как независимая переменная «CustServ Calls», «Длина учетной записи» и «Day Mins» (независимые переменные теперь разделены только на 3 столбца):

Затем мы используем фундаментальный алгоритм дерева решений, импортируя функцию DecisionTreeClassifier из Sklearn:

С помощью приведенного выше кода мы можем создать модель дерева решений для наших данных — модель «t» предсказывает, уходит клиент или нет. Передавая данные клиентов о «CustServ Calls», «Длительности учетной записи» и «Дневных минутах», мы можем предсказать, собирается ли клиент уйти или продлить:

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

Сравнив его с нашими данными об оттоке, используя функцию precision_score, мы можем увидеть, как работает наша модель:

100% правильно!

Не совсем. Поскольку каждый лист нашего дерева решений однороден, мы обучили данные из всего набора данных — поэтому у нас 100% правильность. Чтобы противостоять этому, нам нужно разделить набор данных на обучающие и тестовые данные.

Используя Sklearn и установив для test_size значение 0,25, мы можем разделить наши данные на 75% обучающих и 25% тестовых данных:

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

Фактическая точность нашей первой модели:

Поскольку точность низкая, нам нужно получить больше данных, разветвляясь на другие категории (помимо трех, которые мы использовали). Поскольку телефон и состояние являются объектами, мы не включили их в эту модель. Все остальное будет включено в нашу модель:

Включая все категории, обучается и сравнивается новый алгоритм:

Мы достигли точности 90%+, что неплохо. Однако в деловом мире требуется более высокая точность, чтобы не тратить дополнительные ресурсы на ошибочно предсказанных клиентов. Более того, деревья решений обычно плохо предсказывают из-за того, что данные тестирования выходят за пределы обучающих данных или из-за избыточного обучения. Чтобы повысить точность, нам нужно попробовать другой алгоритм.

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

Чтобы все деревья отличались друг от друга, мы случайным образом выбираем (подмножество) категории для каждого дерева путем замены (бутстрап).

Запуск функции RandomForestClassifier и сравнение результатов:

Мы достигли 95%+, что является лучшим результатом, чем алгоритм дерева решений ранее.

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

Вывод

Учебное пособие было чрезвычайно информативным для энтузиастов науки о данных. Киа Хан преподавала в медленном темпе, давая ученикам время задать даже самые простые вопросы о Python или науке о данных.

Кроме того, эта сессия дала мне глубокое понимание того, как наука о данных может реально влиять на бизнес-решения. Модель, которую мы создали из кодов Python, уже может оказать огромное влияние на компанию — помочь им ориентироваться на клиентов, которые находятся на грани отказа от их обслуживания. Кроме того, после этой сессии я еще больше увлекся наукой о данных, потому что теперь я вижу гораздо больше возможных областей интересов, в которых я мог бы применить анализ данных.

Сражаться!