Выбор и использование классификатора в многоцелевом сценарии - PullRequest
0 голосов
/ 01 апреля 2020

В настоящее время я пытаюсь разработать модель, которая рекомендует продукты клиентам на основе их демографии c, а также прошлых данных о продуктах. Есть 6 продуктов, которые я назову «Продукты AF», и у каждого продукта есть несколько переменных, описывающих его характеристики. Например: A_1, A_2, A_3, A_4, где A_1 обозначает количество лет, прошедшее с момента, когда покупатель принял этот продукт. Все эти данные являются категориальными данными, для которых я выполнил горячее кодирование. Кроме того, у каждого клиента есть переменные, такие как возраст, пол и т. Д. c.

Размер выборки: 1 миллион

Список продуктов: A, B, C, D, E, F

Список переменных: возраст, пол, семейное положение, A_1 , A_2, A_3, A_4, B_1, B_2, B_3, B_4, C_1, C_2, C_3 и др. c ...

В настоящее время я использую регрессию logisti c с индикатором продукта в качестве целевые переменные, и я сталкиваюсь со следующими проблемами:

Первое: мой набор данных сильно несбалансирован в том смысле, что большинство (> 80%) клиентов имеют продукт А, но очень немногие имеют другие продукты. Доля клиентов, у которых есть продукт B, например, составляет всего 10%. Даже после использования опции 'class_weight' = 'сбалансированный' в регрессии sklearn 'logisti c, результирующие вероятности для положительных меток классов для Продуктов BF всегда меньше, чем отрицательных меток классов. Я также не уверен, стоит ли мне включать другие переменные, определяемые продуктом c, такие как B_1, B_2 и c, поскольку для большинства наблюдений эти переменные будут равны 0.

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

Следовательно, у меня следующие вопросы: 1) Должен ли я использовать регрессию logisti c для этой проблемы? 2) Какие данные мне следует добавить в мою модель, учитывая разреженность большинства столбцов?

Пример моего кода ниже:

#Product 3
p_3_subset = data_subset.drop(['p_1_tag', 'p_2_tag', 'p_3_tag', 'p_4_tag', 'p_5_tag', 'p_6_tag'], axis=1)
p_3_label = data_subset[['p_3_tag']]

#Train Validation Test split
p_3_train_data, p_3_test_data, p_3_train_label, p_3_test_label = train_test_split(
    p_3_subset , p_3_label , test_size=0.2, random_state=3)

p_3_logistic = LogisticRegression(random_state=5, class_weight='balanced')
p_3_logistic.fit(p_3_train_data, p_3_train_label.values.ravel())
results = p_3_logistic.predict(p_3_test_data)
print(np.unique(results))
print(p_3_logistic.score(p_3_test_data, p_3_test_label))
print(p_3_logistic.predict_proba(p_3_test_data))

Спасибо!

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