Применение метода случайного леса для анализа покупательной способности

Бесплатный доступ

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

Еще

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

Короткий адрес: https://sciup.org/148326844

IDR: 148326844   |   DOI: 10.18137/RNU.V9187.23.02.P.141

Текст научной статьи Применение метода случайного леса для анализа покупательной способности

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

Маликов Алексей Валерьевич магистрант кафедры информационных систем в экономике и управлении, Институт информационных технологий и инженерно-компьютерных технологий, Российский новый университет, Москва. Сфера научных интересов: искусственный интеллект, применение информатики в управлении.

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

Постановка задачи

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

В рамках поставленной задачи необходимо было решить следующие подзадачи:

  •    на основе собранной базы данных клиентов с проставленными группами их платежеспособности провести анализ и выяснить, какие критерии, указанные клиентами при регистрации, наиболее влияют на предполагаемую платежеспособность;

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

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

  •    доработать систему для улучшения точности ее работы.

Применение метода случайного леса для анализа покупательной способности

Понятие случайного леса (ансамбль) и его описание

В качестве инструмента классификации была выбрана модель случайного леса (Random Forest). Суть модели заключается в том, что обучающая выборка (множество признаков) разделяется на несколько подмножеств, причем эти подмножества формируются случайным образом, где значения в каждом наборе данных могут повторяться. Алгоритм формирования таких подмножеств называется бутстрэп (от англ. Bootstrap) [1]. На Рисунке 1 изображен принцип разбиения обучающей выборки по данному алгоритму.

Обучающая выборка

Рисунок 1. Алгоритм бутстрэп

Источник: здесь и далее рисунки и схемы выполнены авторами.

Как показано на Рисунке 1, обучающая выборка разделяется на определенное количество выборок N, причем должно выполняться условие v < m, где v – объем данных в новых сформированных выборках, а m – объем данных обучающей выборке.

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

Как показано на Рисунке 2, первая вершина содержит набор случайно отобранных объектов (или подмножество) v и предикат B v ( x ) , который определяет условие перехода на ту или иную ветвь. На следующем уровне для предиката B v ( x ) определяется подмножество v 1 , которое представляет собой случайно отобранные объекты из подмножества v, причем v 1 < v, и, таким образом, идет формирование предиката для каждой вершины до последней ветви дерева.

Таким образом, для каждой выборки N строится независимое дерево b(x), результаты выборок затем усредняются, что можно записать в виде ax = NX^x) , где ax – набор обучающих алгоритмов (в данном случае бинарных деревьев), который также называется ансамблем алгоритмов; N – количество деревьев; i – счетчик для деревьев; b – решающее дерево; x – сгенерированная выборка.

Рисунок 2. Построение решающего дерева

Важность (значимость) признаков

Исходя из вышесказанного, можно сделать вывод, что для построения случайного леса будут выбираться наилучшие признаки. Необходимо определить, какие признаки будут иметь большее значение для построения случайного леса в данной конкретной задаче. Для этого применяется метод Feature Importance [2].

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

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

Применение метода случайного леса для анализа покупательной способности

Рисунок 3. Наиболее важные признаки

Тестирование модели

Тестирование модели производилось в виртуальной среде Google Colab на языке программирования Python [3]. Работа с данными производилась с помощью библиотеки Pandas [4], а построение модели осуществлялось с помощью библиотеки Scikit-learn [5].

Имеющийся dataset насчитывает 10695 строк, собранных мегамаркетом. В нем присутствуют такие колонки, как:

ID – уникальный идентификатор клиента;

Gender – пол;

Ever married – семейное положение;

Age – возраст;

Graduated – является ли клиент выпускником;

Profession – профессия;

Work experience – опыт работы (в годах);

Spending score – потребительская способность;

Family size – количество членов семьи (включая самого клиента);

Category – анонимизированная категория для клиента.

Разработка системы

На Рисунке 4 представлены данные без предобработки из исходного датасета.

Необходимо провести первоначальную обработку этих данных, а именно избавиться от дублирующих записей, заполнить пустые значения или удалить их. Это необходимо сделать для корректной работы модели, в противном случае качество обучения алгоритма будет низким. На Рисунке 5 представлена сумма пропущенных значений по всем колонкам в исходной выборке.

ID Gender Ever_Married Age Graduated Profession Work_Experience Spending_Score Family_Size Category

0

462809

Male

No

22

No

Healthcare

1.0

Low

4.0

Cat_4

1

462643

Female

Yes

38

Yes

Engineer

NaN

Average

3.0

Cat_4

2

466315

Female

Yes

67

Yes

Engineer

1.0

Low

1.0

Cat_6

3

461735

Male

Yes

67

Yes

Lawyer

0.0

High

2.0

Cat_6

4

462669

Female

Yes

40

Yes

Entertainment

NaN

High

6.0

Cat_6

2622

467954

Male

No

29

No

Healthcare

9.0

Low

4.0

Cat_6

2623

467958

Female

No

35

Yes

Doctor

1.0

Low

1.0

Cat_6

2624

467960

Female

No

53

Yes

Entertainment

NaN

Low

2.0

Cat_6

2625

467961

Male

Yes

47

Yes

Executive

1.0

High

5.0

Cat_4

2626

467968

Female

No

43

Yes

Healthcare

9.0

Low

3.0

Cat 7

10695 rows * 10 columns

Gender9

Ever_Married190

Age9

Graduated102

Profession152

WorkExperienee1098

5pending_Score0

Family_Size448

Category108

dtype: int64

Рисунок 5. Сумма пропущенных значений

На Рисунке 6 показан код заполнения некоторых пропущенных значений, удаление дублирующих и пустых записей.

Признаки Profession и Ever_Married заполняются самым популярным значением – Artist, остальные заполняются средним по значениям в колонке. На следующем этапе необходимо преобразовать все категориальные переменные в числовые. Для этого нужно воспользоваться классом Label Enсoder библиотеки sklearn.preprocessing. Код перевода строковых значений числа показан на Рисунке 7.

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

Далее предобработанные данные разбиваются на две выборки – train и test – в соотношении 80 на 20 (Рисунок 8).

Применение метода случайного леса для анализа покупательной способности df ['Profession'] = df['Profession'].fillna(df['Profession'].mode()[0])

df[’Work_Experience’] = df['Work_Experience'].fillna(df[’Work_Experience'],mean())

df['Family_Size‘] = df[’Family_Size‘].fillna(df['Family_Size'].mean())

df['EverMarried'] = df['EverMarried'].fillna(df['EverMarried'].mode()[0])

df.duplicated().sum()

df = df.drop_duplicates()

ID

Gender

Ever_Married

Age

Graduated

Profession

Work_Experience

Spending_Score

Faraily_Size

Category

0

462809

Male

No

22

No

Healthcare

1.000000

Low

4.0

Cat_4

1

462643

Female

Yes

38

Yes

Engineer

2.619777

Average

3.0

Cat_4

2

466315

Female

Yes

67

Yes

Engineer

1.000000

Low

1.0

Cat_6

3

461735

Male

Yes

67

Yes

Lawyer

0.000000

High

2.0

Cat_6

4

462669

Female

Yes

40

Yes

Entertainment

2.619777

High

6.0

Cat_6

2622

467954

Male

No

29

No

Healthcare

9.000000

Low

4.0

Cat_6

2623

467958

Female

No

35

Yes

Doctor

1.000000

Low

1.0

Cat_6

2624

467960

Female

No

53

Yes

Entertainment

2.619777

Low

2.0

Cat_6

2625

467961

Male

Yes

47

Yes

Executive

1.000000

High

5.0

Cat_4

2626

467968

Female

No

43

Yes

Healthcare

9.000000

Low

3.0

Cat_7

10355 rows * 10 columns

Рисунок 6. Заполнение пропусков в колонках from sklearn.preprocessing import LabelEncoder, normalize le = LabelEncoder()

cols_e = ["Profession", "Category","Gender","Ever_Married","Graduated","Spending Score"1

for col in cols_e:

df_copy[col] = le.fit_transform(df_copy[col])

df_copy = pd.get_dummies(df_copy, columns=["Gender", "Ever_Married", "Graduated"])

"Gender_l': " Gender_male',

'Ever_Married_0": 'Ever_Married_No',

"Ever_Married_l': "Ever_Married_Yes",

"Graduated-©": "Graduated_No", "Graduated_l": "Graduated_Yes"})

df_copy

Age Profession Work_Experience Spending Score Fanily_Size Category Gender_Female Gendermale Ever_Married_No Ever_Married_Yes Graduated_No Graduated_Yes

0

1

22

38

5

2

1.000000

2.619777

2

0

4.0

3.0

3

3

0

1

1

0

1

0

0

1

1

0

0

1

2

67

2

1.000000

2

1.0

5

1

0

0

1

0

1

3

67

7

0.000000

1

2.0

5

0

1

0

1

0

1

4

40

3

2.619777

1

6.0

5

1

0

0

1

0

1

2622

29

5

9.000000

2

4.0

5

0

1

1

0

1

0

2623

35

1

1.000000

2

1.0

5

1

0

1

0

0

1

2624

53

3

2.619777

2

2.0

5

1

0

1

0

0

1

2625

47

4

1.000000

1

5.0

3

0

1

0

1

0

1

2626 43

10355 rows x

5

12 columns

9.000000

2

3.0

6

1

0

1

0

0

1

Рисунок 7. Кодировка признаков

Рисунок 8. Выборки train, test

Обучение модели происходит в два этапа. Сначала обучается модель со стандартными параметрами, находятся наиболее важные признаки. Затем модель обучается еще раз при настраиваемых параметрах. Процесс обучения модели представлен на Рисунке 9.

RandomForestClassifier

RandomForestClassifier()

[39] clfrf = RandomForestClassifier()

Training Accuracy : 0.9758958701590873

Testing Accuaracy : 0.6780205655526992

Рисунок 9. Первичное обучение модели

Как можно заметить, точность данных на train-выборке составила 97 %; в свою очередь, точность на тестовой выборке составила 67 %, что является неудовлетворительным результатом. Предположительно, для достижения лучшей точности на тестовой выборке необходимо провести обучение модели с настраиваемыми параметрами. Обучение модели производится с помощью сетки, в которой перебираются все заданные параметры. Иными словами, обучение производится последовательным перебором различных параметров. На Рисунке 10 представлен итоговый результат обучения.

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

n_estimators = 250;

max_depth = 10.

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

Применение метода случайного леса для анализа покупательной способности parameters = {'n_estimators': [int(x) for x in np.linspace(start=259, stop=279, num = 2)], ’max_depth’: [int(x) for x in np.llnspace(start=2, stop=15, num=15)], }

  • [251]    gridsearchcvclf = GridSearchCV(clf_rf, parameters, cv=5, verbose=l, n_jobs=-l)

  • [252]    gridsearchcvclf,fit(x_train, ytrain)

Fitting 5 folds for each of 30 candidates, totalling 150 fits

  • ►           GridSearchCV

  • ►    estimator: RandomForestClassifier I ► RandomForestClassifier;

_________________1_________________

  • [253]    grid_search_cv_clf.best_params_

{"maxdepth': 16, 'n_estimators': 259}

  • [254]    best_clf_rf = grid_search_cv_clf.best_estimator_

Training Accuracy : 0.8540298541636909

Testing Accuaracy : 9.8149190257069498

Рисунок 10. Финальный результат обучения модели

Оценка модели

Для оценки качества работы модели была выбрана метрика Precision (точность в пределах класса). Precision – доля объектов, названных классификатором положительными и при этом действительно являющихся положительными. На Рисунке 11 показан результат оценки качества модели.

precision_score(y_test, y_pred, average="weighted')0.8269343358965637

Рисунок 11. Precision score

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

df['Prediction*] = clf_rf.predict(X)

df['Prediction*] = le.inverse_transform(df['Prediction'])

df

ID

Gender

Ever_Married

Age

Graduated

Profession

Hork_Experience

Spending Score

Faraily_Size

Category

Prediction

0

462809

Male

No

22

No

Healthcare

1 000000

Low

4.0

Cat_4

Low

1

462643

Female

Yes

38

Yes

Engineer

2.619777

Average

3.0

Cat_4

Average

2

466315

Female

Yes

67

Yes

Engineer

1 000000

Low

1.0

Cat_6

Low

3

461735

Male

Yes

67

Yes

Lawyer

0 000000

High

2.0

Cat_6

Low

4

462669

Female

Yes

40

Yes

Entertainment

2.619777

High

6.0

Cat_6

High

2622

467954

Male

No

29

No

Healthcare

9.000000

Low

4.0

Cat_6

Low

2623

467958

Female

No

35

Yes

Doctor

1.000000

Low

1.0

Cat_6

Low

2624

467960

Female

No

53

Yes

Entertainment

2.619777

Low

2.0

Cat_6

Low

2625

467961

Male

Yes

47

Yes

Executive

1.000000

High

5.0

Cat_4

High

2626 467968 Female

10355 rows x 11 columns

No

43

Yes

Healthcare

9.000000

Low

3.0

Cat_7

Low

  • Рисунок 12. Результат предсказаний

Заключение

Результатом проведенной работы является система на основе машинного обучения, которая способна автоматически классифицировать всех клиентов магазина по группам их платежеспособности. Изучена и проанализирована собранная база данных клиентов с проставленными группами их платежеспособности. Благодаря применению метода случайного леса были выделены критерии из базы данных, оказывающие наибольшее влияние на платежеспособность клиента. Затем была проведена нормализация используемых для обучения и тестирования данных. Также была успешно обучена и протестирована модель на основе машинного обучения, способная прогнозировать платежеспособность клиента по заданным критериям. Кроме того, модель была настроена для получения более высокой точности, при этом итоговая точность составила 81 %.

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

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

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

Применение метода случайного леса для анализа покупательной способности

Список литературы Применение метода случайного леса для анализа покупательной способности

  • Воронцов К.В. Машинное обучение: курс лекций // MachineLearning.ru. URL: http://www.machinelearning.ru/wiki/index.php?title=Машинное_обучение_(курс_лекций,_К.В.Воронцов)# (дата обращения: 17.06.2023).
  • Feature importance // Scikit learn. URL: https://inria.github.io/scikit-learn-mooc/python_scripts/dev_features_importance.html (дата обращения: 17.06.2023).
  • Python. URL: https://www.python.org/(дата обращения: 17.06.2023).
  • Pandas. URL: https://pandas.pydata.org/(дата обращения: 17.06.2023).
  • Scikit-learn. Machine Learning in Python // Scikit learn. URL: https://scikit-learn.org/stable/index. html (дата обращения: 17.06.2023).
  • Технологии интеллектуального анализа данных: Методическое пособие. URL: http://ftp.csdep.mephi.ru/kiselev/BD%26DM/Module04/BD%26DM04L.pdf (дата обращения: 17.06.2023).
Статья научная