Образовательная компания X Education продает онлайн-курсы профессионалам отрасли. В любой день многие профессионалы, заинтересованные в курсах, заходят на их веб-сайт и просматривают курсы.
Компания продает свои курсы на нескольких веб-сайтах и в поисковых системах, таких как Google. Зайдя на сайт, эти люди могут просматривать курсы или заполнять форму для курса или смотреть видео. Когда эти люди заполняют форму, указывая свой адрес электронной почты или номер телефона, они классифицируются как ведущие. Более того, компания также получает потенциальных клиентов через прошлых рефералов. Как только эти лиды будут получены, сотрудники отдела продаж начинают звонить, писать электронные письма и т. Д. В ходе этого процесса некоторые лиды конвертируются, а большинство - нет. Типичный коэффициент конверсии лидов в X education составляет около 30%.
Теперь, хотя у X Education много лидов, коэффициент конверсии у него очень низкий. Например, если, скажем, они получают 100 потенциальных клиентов в день, только около 30 из них конвертируются. Чтобы сделать этот процесс более эффективным, компания хочет определить наиболее потенциальных клиентов, также известных как «горячие лиды». Если они успешно идентифицируют этот набор лидов, коэффициент конверсии лидов должен вырасти, так как отдел продаж теперь будет больше сосредотачиваться на общении с потенциальными лидами, а не на звонках всем.
На начальном этапе генерируется много лидов (вверху), но лишь некоторые из них выходят как платящие клиенты снизу. На средней стадии вам нужно хорошо воспитывать потенциальных клиентов (т.е.обучать лидов о продукте, постоянно общаться и т. Д.), Чтобы получить более высокую конверсию лидов.
X Education хочет выбрать наиболее многообещающих потенциальных клиентов, то есть потенциальных клиентов, которые с наибольшей вероятностью превратятся в платящих клиентов. Компания требует, чтобы вы построили модель, в которой вам необходимо присвоить оценку интереса каждому из потенциальных клиентов, чтобы клиенты с более высокой оценкой лида h имели более высокий шанс конверсии, а клиенты с более низкой оценкой лида имели более низкий шанс конверсии. Генеральный директор, в частности, оценил целевой коэффициент конверсии лидов примерно в 80%.
Библиотека Пикарет
PyCaret - это библиотека машинного обучения с открытым исходным кодом на Python с низким кодом, которая позволяет перейти от подготовки данных к развертыванию модели за считанные минуты в выбранной вами среде записной книжки.
Для более подробной информации посетите их страницу https://pycaret.org/.
Содержание
Переменные Описание
- Prospect ID - уникальный идентификатор, по которому идентифицируется покупатель.
- Номер лида - номер интереса, присваиваемый каждому закупленному лиду.
- Происхождение лида - идентификатор источника, по которому клиент был идентифицирован как лид. Включает API, отправку целевой страницы и т. Д.
- Источник лида - источник лида. Включает Google, обычный поиск, чат Olark и т. Д.
- Не отправлять по электронной почте - индикаторная переменная, выбираемая клиентом, в которой он выбирает, хотят ли они получать по электронной почте информацию о курсе или нет.
- Не звонить - индикаторная переменная, выбираемая клиентом, в которой он выбирает, хотят ли они, чтобы им звонили по поводу курса или нет.
- Преобразовано - целевая переменная. Указывает, успешно ли преобразован интерес.
- Всего посещений - общее количество посещений, совершенных клиентом на веб-сайте.
- Общее время, проведенное на веб-сайте - общее время, проведенное клиентом на веб-сайте.
- Просмотры страниц за посещение - среднее количество страниц на веб-сайте, просмотренных во время посещений.
- Последнее действие - последнее действие, выполненное клиентом. Включает открытое электронное письмо, беседу в чате Olark и т. Д.
- Страна - страна заказчика.
- Специализация - отрасль, в которой заказчик работал раньше. Включает уровень «Выбрать специализацию», что означает, что клиент не выбрал эту опцию при заполнении формы.
- Как вы узнали о X Education - источник, из которого заказчик узнал о X Education.
- Ваша текущая профессия - указывает, является ли клиент студентом, безработным или работающим.
- Что для вас наиболее важно при выборе этого курса Вариант, выбранный клиентом, с указанием его основного девиза, стоящего за прохождением этого курса.
- Поиск - указывает, видел ли покупатель рекламу в любом из перечисленных элементов.
- Журнал
- Газетная статья
- X Образовательные форумы
- Газета
- Цифровая реклама
- По рекомендациям - указывает, пришел ли клиент по рекомендациям.
- Получать больше обновлений о наших курсах - указывает, решил ли клиент получать больше обновлений о курсах.
- Теги - теги, присвоенные клиентам, указывающие на текущий статус лида.
- Качество лида - указывает качество лида на основе данных и интуиции сотрудника, который был назначен лиду.
- Сообщите мне о содержимом цепочки поставок - указывает, хочет ли клиент обновлять содержимое цепочки поставок.
- Получать обновления контента DM - указывает, хочет ли клиент обновлять контент DM.
- Профиль лида - уровень интереса, назначаемый каждому клиенту в зависимости от его профиля.
- Город - город заказчика.
- Индекс асимметричной активности - индекс и оценка, присваиваемая каждому клиенту в зависимости от его активности и профиля.
- Индекс асимметричного профиля
- Оценка асимметричной активности
- Оценка асимметричного профиля
- Я согласен оплатить сумму чеком - указывает, согласился ли клиент оплатить сумму чеком.
- Бесплатная копия Mastering The Interview - указывает, хочет ли клиент бесплатную копию Mastering The Interview или нет.
- Последнее заметное действие - последнее заметное действие, выполненное учеником.
Благодарности
Пример использования UpGrad
Установка библиотеки Pycaret
!pip install pycaret
Чтение набора данных
dataset=pd.read_csv('/content/Lead_Scoring.csv') dataset.head() dataset.shape (9240, 37)
Набор данных содержит 9240 строк и 37 функций.
Информация о наборе данных
dataset.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 9240 entries, 0 to 9239 Data columns (total 37 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Prospect ID 9240 non-null object 1 Lead Number 9240 non-null int64 2 Lead Origin 9240 non-null object 3 Lead Source 9204 non-null object 4 Do Not Email 9240 non-null object 5 Do Not Call 9240 non-null object 6 Converted 9240 non-null int64 7 TotalVisits 9103 non-null float64 8 Total Time Spent on Website 9240 non-null int64 9 Page Views Per Visit 9103 non-null float64 10 Last Activity 9137 non-null object 11 Country 6779 non-null object 12 Specialization 7802 non-null object 13 How did you hear about X Education 7033 non-null object 14 What is your current occupation 6550 non-null object 15 What matters most to you in choosing a course 6531 non-null object 16 Search 9240 non-null object 17 Magazine 9240 non-null object 18 Newspaper Article 9240 non-null object 19 X Education Forums 9240 non-null object 20 Newspaper 9240 non-null object 21 Digital Advertisement 9240 non-null object 22 Through Recommendations 9240 non-null object 23 Receive More Updates About Our Courses 9240 non-null object 24 Tags 5887 non-null object 25 Lead Quality 4473 non-null object 26 Update me on Supply Chain Content 9240 non-null object 27 Get updates on DM Content 9240 non-null object 28 Lead Profile 6531 non-null object 29 City 7820 non-null object 30 Asymmetrique Activity Index 5022 non-null object 31 Asymmetrique Profile Index 5022 non-null object 32 Asymmetrique Activity Score 5022 non-null float64 33 Asymmetrique Profile Score 5022 non-null float64 34 I agree to pay the amount through cheque 9240 non-null object 35 A free copy of Mastering The Interview 9240 non-null object 36 Last Notable Activity 9240 non-null object dtypes: float64(4), int64(3), object(30)
Предварительная обработка набора данных
Взятие 70% выборочных данных для обучения и оставшихся 30% для тестирования
data = dataset.sample(frac=0.70, random_state=42) data_unseen = dataset.drop(data.index) data.reset_index(inplace=True, drop=True) data_unseen.reset_index(inplace=True, drop=True) print('Data for Modeling: ' + str(data.shape))
Данные для моделирования: (6468, 37)
print('Unseen Data For Predictions: ' + str(data_unseen.shape))
Невидимые данные для прогнозов: (2772, 37)
Импорт всех классификационных библиотек из Pycaret
from pycaret.classification import *
Инициализация установки
Цель, которую нам нужно предсказать, преобразована.
clf1 = setup(data = data, target = 'Converted', session_id=1)
Подробнее о том, как pycaret настраивает эксперимент с машинным обучением, вы можете узнать по ссылке https://pycaret.org/setup/.
Сравнение результатов разных классификаторов
best_model = compare_models()
Легкий классификатор GBM дает нам лучший результат, двигаясь вперед с классификатором LGBM.
lightgbm = create_model('lightgbm')
Печать гиперпараметров LGBM по умолчанию
print(lightgbm) LGBMClassifier(boosting_type='gbdt', class_weight=None, colsample_bytree=1.0, importance_type='split', learning_rate=0.1, max_depth=-1, min_child_samples=20, min_child_weight=0.001, min_split_gain=0.0, n_estimators=100, n_jobs=-1, num_leaves=31, objective=None, random_state=1, reg_alpha=0.0, reg_lambda=0.0, silent=True, subsample=1.0, subsample_for_bin=200000, subsample_freq=0)
Применение настройки гиперпараметров
tuned_lightgbm = tune_model(lightgbm)
Построение кривой roc-auc для lightgbm
plot_model(tuned_lightgbm, plot = 'auc')
График важности функции
plot_model(tuned_lightgbm, plot='feature')
Важность переменной Lead Number самая высокая. Номер лида - это номер, присвоенный каждому предоставленному лиду.
Кривая точного отзыва
plot_model(tuned_lightgbm, plot = 'pr')
Матрица неточностей
plot_model(tuned_lightgbm, plot = 'confusion_matrix')
Ниже приведен код для проверки всех показателей оценки и диаграмм.
evaluate_model(tuned_lightgbm)
Прогнозирование модели
predict_model(tuned_lightgbm)
Проверка модели на невидимых данных
unseen_predictions = predict_model(tuned_lightgbm, data=data_unseen)
После этого шага «Метка» и «Оценка» мы создаем две новые функции.
Проверка точности невидимых данных
from pycaret.utils import check_metric check_metric(unseen_predictions['Converted'], unseen_predictions['Label'], metric = 'Accuracy')
Точность составляет 0,9455% для невидимых данных.
Сохранение модельного конвейера
save_model(tuned_lightgbm,'./model') Transformation Pipeline and Model Succesfully Saved (Pipeline(memory=None, steps=[('dtypes', DataTypes_Auto_infer(categorical_features=[], display_types=True, features_todrop=[], id_columns=[], ml_usecase='classification', numerical_features=[], target='Converted', time_features=[])), ('imputer', Simple_Imputer(categorical_strategy='not_available', fill_value_categorical=None, fill_value_numerical=None, numeric_st... boosting_type='gbdt', class_weight=None, colsample_bytree=1.0, feature_fraction=0.5, importance_type='split', learning_rate=0.3, max_depth=-1, min_child_samples=26, min_child_weight=0.001, min_split_gain=0.8, n_estimators=230, n_jobs=-1, num_leaves=100, objective=None, random_state=1, reg_alpha=0.005, reg_lambda=4, silent=True, subsample=1.0, subsample_for_bin=200000, subsample_freq=0)]], verbose=False), './model.pkl') saved_final_lightgbm_model = load_model('./model')
В дальнейшем мы можем развернуть эту модель в облаке или локально для прогнозирования в реальном времени или пакетного прогнозирования.
Результат
Нам удалось достичь точности 94% на тестовой выборке и 0,99 AUC для обоих классов. Эта модель может помочь X Education более эффективно планировать свои бизнес-стратегии и расширять свой рост, уделяя больше внимания функциям, которые придали нам наибольшее значение.
Надеюсь, вам понравился анализ!