Пошаговое руководство по созданию панели мониторинга лидов на основе машинного обучения с помощью Power BI

Введение

В этом учебном пособии вы познакомитесь с процессом создания панели мониторинга потенциальных клиентов с помощью Power BI. Мы будем использовать набор данных из 1000 лидов и построим модель машинного обучения с помощью pycaret, чтобы предсказать вероятность того, что лид превратится в клиента. Затем мы воспользуемся моделью для оценки потенциальных клиентов, сохраним новый набор данных потенциальных клиентов в базе данных PostgreSQL и визуализируем результаты в Power BI.

Вы можете найти код этого руководства на моем GitHub здесь.

Предпосылки

- Базовые знания Python

- Базовые знания Power BI.

- Базовые знания SQL.

- Базовые знания моделей классификации машинного обучения

Что такое оценка потенциальных клиентов?

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

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

Окончательный предварительный просмотр панели управления

Используемые технологии

- Jupyter Notebook для создания модели машинного обучения с помощью pycaret.

- Power BI для визуализации результатов и создания информационной панели с данными из базы данных PostgreSQL.

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

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

Что такое Power BI?

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

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

Что такое PostgreSQL?

PostgreSQL — это мощная система объектно-реляционных баз данных с открытым исходным кодом. Он имеет более чем 15-летнюю активную разработку и проверенную архитектуру, которая заслужила ему прочную репутацию за надежность, целостность данных и правильность. Он полностью совместим с ACID, имеет полную поддержку внешних ключей, объединений, представлений, триггеров и хранимых процедур (на нескольких языках).

Он включает большинство типов данных SQL:2008, включая INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL и TIMESTAMP. Он также поддерживает хранение больших двоичных объектов, включая изображения, звуки или видео. Он имеет собственные программные интерфейсы для C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC и прочее, а также исключительную документацию.

Он работает на всех основных операционных системах, включая Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) и Windows. Его можно использовать бесплатно, и вы можете найти дополнительную информацию о PostgreSQL здесь.

Что такое пикарет?

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

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

Набор данных

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

Шаг 1. Подготовка и очистка данных

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

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

Блокнот для уборки можно найти здесь. Ниже я покажу ниже только соответствующие фрагменты кода из блокнота.

Визуализация набора данных и количественная оценка недостающих значений

Удалить столбцы, не относящиеся к анализу

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

df.drop(['How did you hear about X Education', 'What is your current occupation', 'What matters most to you in choosing a course', 'Tags', 'Lead Quality'], axis=1, inplace=True)

Удалить строки с отсутствующими значениями

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

# drop rows with null values

df.dropna(inplace=True)

# reset the index

df.reset_index(drop=True, inplace=True)

Обновленный набор данных содержит 6173 строки и 27 столбцов.

Базовый исследовательский анализ данных: визуализация происхождения интереса и города

В приведенном ниже фрагменте кода показано, как визуализировать столбцы «Происхождение интереса» и «Город», а также количество конверсий и неконверсий. Преобразованный был преобразован в двоичную переменную (1 для преобразованного и 0 для не преобразованного).

# value counts bar chart of column 'Lead Origin'

df['Lead Origin'].value_counts().plot.bar(figsize=(12,6))

# value counts bar chart of column 'City'

df['City'].value_counts().plot.bar(figsize=(12,6))

python
# value counts bar chart of column 'Converted'

df['Converted'].value_counts().plot.bar(figsize=(12,6))

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

# save the cleaned data to a new excel file

df.to_excel('C:/Users/marce/Desktop/Python/pythoncheatsheets/python_projects/Lead_scoring/archive/Lead_Scoring_cleaned.xlsx', index=False)

Шаг 2. Создание модели с помощью pycaret

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

# import the necessary packages

import pandas as pd
import numpy as np
from pycaret.classification import * #this is the pycaret classification module imported 

# load the cleaned dataset

df_historical = pd.read_excel('C:/Users/marce/Desktop/Python/pythoncheatsheets/python_projects/Lead_scoring/archive/Lead_Scoring_cleaned.xlsx')

Настройте конвейер pycaret

Фрагмент кода ниже показывает, как настроить конвейер pycaret. Мы установим целевую переменную в Converted, мы проигнорируем столбец Prospect_ID, мы объединим числовые признаки, мы нормализуем данные и удалим мультиколлинеарность. Мы также установим session_id равным 123 и будем использовать GPU. Функция настройки вернет среду pycaret, которую мы сохраним в переменной exp_1.

# initialize setup

exp_1 = setup(data = df_historical,  target = 'Converted', session_id=123, 
              ignore_features=['Prospect_ID'], bin_numeric_features=['TotalVisits', 'Total_Time_Spent_on_Website', 'Page_Views_Per_Visit'],
             normalize=True, remove_multicollinearity=True, use_gpu=True)

Сравните модели

Фрагмент кода ниже показывает, как сравнивать модели. Мы сравним модели с помощью метрики AUC и воспользуемся 10-кратной перекрестной проверкой. Функция compare_models вернет кадр данных pandas с результатами сравнения. Сохраним результаты в переменной top3.

best_model = compare_models(n_select=5, sort='AUC')

Создайте модель

По результатам сравнения мы видим, что модель логистической регрессии имеет лучший показатель AUC. Теперь мы создадим модель логистической регрессии. Фрагмент кода ниже показывает, как создать модель логистической регрессии. Мы установим кратность 10 и будем использовать показатель AUC. Функция create_model вернет обученную модель, которую мы сохраним в переменной lr.

lr = create_model('lr')

Создание и тестирование ансамблевой модели логистической регрессии

Фрагмент кода ниже показывает, как создать и протестировать ансамблевую модель логистической регрессии. Мы установим кратность 10 и будем использовать показатель AUC. Функция ансамбля_модели вернет обученную модель, которую мы сохраним в переменной bagged_lr.

bagged_lr = ensemble_model(lr, method='Bagging', round=2, choose_better=True, optimize='AUC')

Построить модель

Фрагмент кода ниже показывает, как построить модель. Мы построим модель, используя метрику AUC. Функция plot_model вернет график, который мы сохраним в переменной plot_lr.

# Plot the model based on AUC

plot_model(bagged_lr, plot='auc')

Оцените модель

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

Прогнозируйте модель на тестовых данных

Фрагмент кода ниже показывает, как предсказать модель на тестовых данных. Мы будем использовать функцию predict_model. Функция predict_model вернет кадр данных pandas с прогнозами, которые мы сохраним в переменной test_pred.

test_pred = predict_model(bagged_lr)

Прогнозируйте модель по новым/невидимым данным, файл: Lead_new файл excel

Фрагмент кода ниже показывает, как предсказать модель на основе новых данных/невидимых данных. Мы будем использовать функцию predict_model. Функция Predict_Model вернет кадр данных pandas с прогнозами, которые мы сохраним в прогнозах переменных.

# Import the unseen data csv file

unseen_data = pd.read_excel('C:/Users/marce/Desktop/Python/pythoncheatsheets/python_projects/Lead_scoring/archive/Lead_new.xlsx')

## unseen_predictions

unseen_predictions_new = predict_model(final_bagged_lr, data=unseen_data)

unseen_predictions_new.head(5)

Шаг 3. Создайте новый столбец с оценкой активных или холодных лидов на основе времени, проведенного на веб-сайте

В приведенном ниже фрагменте кода показано, как создать новый столбец с оценкой потенциальных клиентов «Горячий» или «Холодный» на основе времени, проведенного на веб-сайте. Мы будем использовать функцию numpy.where. Функция numpy.where вернет кадр данных pandas со столбцом с именем Lead_Score.

# Create the scoring lead for the new unseen data and drop the Label column (Predicted Column) on the new data

unseen_predictions_new_BI = unseen_predictions_new.copy()

# so the parameters to score the leads between hot and cold are: Total time Spent on Site >= 600


unseen_predictions_new_BI['Lead_Score'] = np.where(unseen_predictions_new_BI['Total_Time_Spent_on_Website'] >= 600, 'Hot', 'Cold')

unseen_predictions_new_BI.head(5)

Подготовка данных для информационной панели BI

Теперь мы очищаем набор данных перед его сохранением в файл excel и sql: удаляем метку столбца, бесполезную для нашей информационной панели, мы переименовываем столбец «Score» в «Pred_Prob», а «Lead_Score» в Lead_Category.

unseen_predictions_new_BI.drop(columns='Label', inplace=True, axis=1)

unseen_predictions_new_BI.rename(columns={'Score': 'ML_Pred_Proba'}, inplace=True)

unseen_predictions_new_BI.rename(columns={'Lead_Score': 'Lead_Category'}, inplace=True)

unseen_predictions_new_BI.head(5)

**Save the data into an excel file**

unseen_predictions_new_BI.to_excel('new_leads_BI.xlsx', index=None)

Шаг 4. Сохраните данные в базе данных PostgreSQL

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

Сначала мы поместим файл excel в кадр данных pandas. Затем мы создадим соединение с базой данных. Затем мы создадим курсор и выполним SQL-запрос для создания таблицы. См. код ниже:

'''
Upload the new leads data to postgresql database using psycopg2 and pandas
'''

import pandas as pd
import numpy as np
import psycopg2

# read the excel file and convert it to a dataframe

df = pd.read_excel('C:/Users/marce/Desktop/Python/pythoncheatsheets/python_projects/Lead_scoring/data_powerBI/new_leads_BI.xlsx')



# connect to the database

conn = psycopg2.connect(
    host = 'localhost',
    dbname = 'Leads',
    user = 'postgres',
    password = 'LXXXX',
    port = '5432')
```
# Now we will create a cursor and we will execute the SQL query to create the table. 

# Create a cursor object
cur = conn.cursor()

# Generate the SQL statement to insert the data

table_name = 'new_leads' # name of the table to be created
cols = [] # list of columns
for col, dtype in zip(df.columns, df.dtypes): # iterate over the columns and their data types
    if dtype == 'int64':
        cols.append(f'{col} INTEGER')
    elif dtype == 'float64':
        cols.append(f'{col} FLOAT')
    else:
        cols.append(f'{col} VARCHAR(255)')
cols = ', '.join(cols)

placeholders = ', '.join(['%s'] * len(df.columns)) # create placeholders for the values to be inserted

create_table = f"CREATE TABLE IF NOT EXISTS {table_name} ({cols})" # create the table
insert_data = f"INSERT INTO {table_name} VALUES ({placeholders})" # insert the data

# Execute the SQL statements
cur.execute(create_table)
for i, row in df.iterrows():
    cur.execute(insert_data, tuple(row))
    
# Commit the changes and close the cursor
conn.commit()
cur.close()

# Close the connection
conn.close()

Шаг 5. Подключите PostgreSQL к таблице и создайте панель мониторинга PowerBI

Теперь мы подключим PostgreSQL к таблице и создадим панель мониторинга PowerBI. Если вы хотите узнать больше о том, как установить и настроить PowerBI, вы можете прочитать следующую статью. Файл PowerBI доступен в моем репозитории GitHub.

Чтобы подключить таблицу PostgreSQL к PowerBI, мы выполним следующие действия:

1) Создайте новый источник данных.

2) Выберите базу данных PostgreSQL.

3) Выберите таблицу, которую мы хотим подключить.

4) Выбираем столбцы, которые хотим соединить.

5) Выберите тип данных столбцов.

6) Выберите режим подключения.

7) Выберите режим аутентификации.

8) Выберите имя сервера.

9) Выберите имя базы данных, имя пользователя, пароль и номер порта.

После выполнения описанных выше шагов новые данные о лидах будут подключены к панели мониторинга PowerBI и отобразятся в разделе таблицы следующим образом.

Создайте панель мониторинга PowerBI

Выводы

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

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

Я надеюсь, что это вдохновит и побудит вас попробовать это на себе. Если у вас есть какие-либо вопросы или комментарии, пожалуйста, не стесняйтесь оставлять их ниже. Я буду рад ответить на них.

Автор:

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

Вы можете подписаться на меня в Medium и Twitter или посетить мой веб-сайт и страницу Github.