Starbucks Capstone Challenge — проект Capstone Udacity DSND

Введение

Этот проект является частью Udacity Capstone Challenge.

Этот набор данных состоит из трех файлов:

  1. profile.json: пользователи программы вознаграждений (17000 пользователей x 5 полей)

2. Portugal.json: предложения, отправленные в течение 30-дневного тестового периода (10 предложений x 6 полей).

3. Transcription.json: журнал событий (306648 событий x 4 поля)

Подготовка данных

Очистка данных:

1.Данные портфеля

  • Изменено имя столбца «id» на «offerid».
  • Удалены символы подчеркивания в именах столбцов.
  • Один горячий кодирует столбец «тип предложения» и столбцы «каналы».

2. Данные профиля

  • Удалены клиенты с отсутствующими данными о доходах и профили клиентов, в которых отсутствует атрибут пола.
  • Изменено имя столбца «id» на «customerid».
  • Преобразован столбец «became_member_on» в объект даты и времени, а столбец пола — из символа в число.
  • Один горячий кодирует год начала членства клиента, месяц начала и возрастной диапазон.

3. Расшифровка данных

  • Я изменил имя столбца «человек» на «customerid» и столбец «время» на «timedays», удалил идентификаторы клиентов, которых нет в DataFrame профиля клиента. также преобразованная переменная времени из часов в дни.
  • Создайте два кадра данных, которые описывают: предложения и события транзакций клиентов.
  • Одно горячее кодирование предлагает события.

Исследовательский анализ данных

Общее распространение профиля

Доход (после кодирования), возраст, пол, год начала членства, месяц начала членства

Коробка График дохода, возраст

Суммарный доход по полу

Доход по полу за каждый месяц

Доход по полу за каждый год

График суммы дохода по годам

Доход для возрастного диапазона

Моделирование

шаги:

  1. Преобразование искаженных непрерывных объектов
    для столбцов memberyear и memberstartMonth
  2. Нормализация числовых признаков
  3. Перемешать и разделить данные
  4. Оценка производительности модели
    - Производительность наивного предиктора
    - Создание конвейера обучения и прогнозирования
    - Начальная оценка модели
  5. Улучшение результатов (поиск по сетке)

Преобразование наклонных непрерывных элементов

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

Нормализация числовых признаков

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

Перемешать и разделить данные

Когда все категориальные переменные преобразованы и все числовые признаки нормализованы, нам нужно разделить наши данные на обучающие и тестовые наборы. Мы будем использовать 80% данных для обучения и 20% для тестирования,

Оценка производительности модели

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

  • Точность: процент правильно классифицированных элементов от общего числа.

Точность = (TP+TN)/(N+P)

  • Показатель F-beta как показатель, учитывающий как точность, так и полноту:

В частности, когда β=0,5, акцент делается на точности. Я выбираю β=0,5. Поэтому я обязательно отправляю все предложения каждому клиенту, чей доход выше среднего.

1. Наивный предсказатель

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

Точность: 0,464

Показатель F: 0,520

2. Три из этих алгоритмов будут контролироваться учащимися:

Создание конвейера обучения и прогнозирования

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

В блоке кода ниже:

  • Импортируйте fbeta_score и accuracy_score из sklearn.metrics.
  • Подберите учащегося к выборочным данным обучения и запишите время обучения.
  • Выполните прогнозы на тестовых данных X_test, а также на первых 300 обучающих точках X_train[:300].
  • Запишите общее время предсказания.
  • Вычислите показатель точности как для обучающего подмножества, так и для тестового набора.
  • Рассчитайте F-оценку как для обучающего подмножества, так и для тестового набора.

Первоначальная оценка модели

Результаты:

Улучшение результатов

Наконец, в этом разделе мы выберем лучшую модель для использования с нашими данными, а затем выполним оптимизацию поиска по сетке.

Настройка модели

n_estimators, max_features, max_depth, min_samples_split, min_samples_leaf настраиваются в соответствии с обучающими данными с использованием RandomizedSearchCV.

  • max_features ( auto): количество признаков, которые следует учитывать при поиске наилучшего разделения.
    - max_depth : максимальная глубина дерева. Если None, то узлы расширяются до тех пор, пока все листья не станут чистыми или пока все листья не будут содержать выборок меньше, чем min_samples_split.
  • n_estimators: количество деревьев в лесу.
  • min_samples_split: минимальное количество выборок, необходимое для разделения внутреннего узла.
  • min_samples_leaf: минимальное количество образцов, необходимое для конечного узла. Точка разделения на любой глубине будет рассматриваться только в том случае, если она оставляет не менее min_samples_leaf обучающих выборок в каждой из левой и правой ветвей. Это может иметь эффект сглаживания модели, особенно в регрессии.

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

Построенная модель выглядит следующим образом:

Важность функции

Извлечение важности функции

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

в этом коде, как показано ниже:

Нормализованные веса для первых пяти наиболее прогностических признаков:

Выбор функции

Результаты: