Предупреждение для новичка
Я изучал ML на python в течение последних нескольких месяцев и добился некоторых замечательных результатов. В настоящее время, однако, я застрял в проекте и нуждаюсь в руководстве кого-то с большим опытом (Google может принять вас только так далеко, как кажется ?).
Чего я пытаюсь достичь
У меня есть фиктивный набор данных, полный клиентов и их транзакций. Я хочу объединить их в более мелкие «племена» на основе их демографических данных, оценки расходов и поведения в магазинах. Например, одно «племенное» описание может быть чем-то таким гранулированным: (мужчины в возрасте 35 лет, которые в основном покупают музыкальные продукты в субботу днем в первой половине каждого месяца и имеют высокие баллы расходов) Я хочу найти сладкоеместо между гранулярной сегментацией и общей сегментацией, например: сегментация по доходам и баллам расходов.
Что я пробовал
Во-первых, я выделил значение типа int, представляющее частоту каждого категориального вхождения в транзакциях каждого клиента. Например:
Client | Home | Movies | Games
1 3 1 0
Это указывает на то, что Клиент 1 покупал предметы, связанные с Домой, 3 раза, предметы, связанные с Кино, 1 раз, и они никогда не покупали предметы в категории Игры.
Я сделал то же самое для Дней (т. Е. Воскресенья - субботы), номера недели (т. Е. 1-5 номера недели в любом конкретном месяце), часа (т. Е. Hour_one - hour_twenty_four).
Этот подход позволяет мне создать чистый вектор чисто числовых данных.
Это пример моих необработанных входных данных в формате JSON (до обработки):
[
{
"id": 1,
"customer_id": 1,
"age": 47,
"gender": "Female",
"first_name": "Lea",
"last_name": "Calafato",
"email": "lcalafato0@cafepress.com",
"phone_number": "612-170-5956",
"income_k": 24,
"location": "Nottingham",
"sign_up_date": "2/16/2019",
"transactions": [
{
"customer_id": "1",
"product_id": 42,
"product_cat": "Home",
"price": 106.92,
"time": "8:15 PM",
"date": "04/15/2019",
"day": "Monday",
"week_num": 3
},
{
"customer_id": "1",
"product_id": 30,
"product_cat": "Movies",
"price": 26.63,
"time": "10:12 AM",
"date": "09/17/2019",
"day": "Tuesday",
"week_num": 4
}
],
"number_of_purchases": 2,
"last_purchase": "09/17/2019",
"total_spent": 133.55
}
]
Это мой кадр данных после обработки и стандартизации:
age 750 non-null int64
income_k 750 non-null int64
spending_score 750 non-null int64
gender__Female 750 non-null uint8
gender__Male 750 non-null uint8
Home 750 non-null float64
Movies 750 non-null float64
Games 750 non-null float64
Grocery 750 non-null float64
Music 750 non-null float64
Health 750 non-null float64
Beauty 750 non-null float64
Sports 750 non-null float64
Toys 750 non-null float64
Garden 750 non-null float64
Computers 750 non-null float64
Clothing 750 non-null float64
Books 750 non-null float64
Outdoors 750 non-null float64
Industrial 750 non-null float64
Kids 750 non-null float64
Tools 750 non-null float64
Automotive 750 non-null float64
Electronics 750 non-null float64
Jewelery 750 non-null float64
Baby 750 non-null float64
Shoes 750 non-null float64
week_one 750 non-null float64
week_two 750 non-null float64
week_three 750 non-null float64
week_four 750 non-null float64
week_five 750 non-null float64
Sunday 750 non-null float64
Monday 750 non-null float64
Tuesday 750 non-null float64
Wednesday 750 non-null float64
Thursday 750 non-null float64
Friday 750 non-null float64
Saturday 750 non-null float64
hour_one 750 non-null float64
hour_two 750 non-null float64
hour_three 750 non-null float64
hour_four 750 non-null float64
hour_five 750 non-null float64
hour_six 750 non-null float64
hour_seven 750 non-null float64
hour_eight 750 non-null float64
hour_nine 750 non-null float64
hour_ten 750 non-null float64
hour_eleven 750 non-null float64
hour_twelve 750 non-null float64
hour_thirteen 750 non-null float64
hour_fourteen 750 non-null float64
hour_fithteen 750 non-null float64
hour_sixteen 750 non-null float64
hour_seventeen 750 non-null float64
hour_eighteen 750 non-null float64
hour_nineteen 750 non-null float64
hour_twenty 750 non-null float64
hour_twenty_one 750 non-null float64
hour_twenty_two 750 non-null float64
hour_twenty_three 750 non-null float64
hour_twenty_four 750 non-null float64*
Я проверил эти данные с помощью алгоритмов k-средних и DBSCAN, но безрезультатно. k-means дает мне 4 кластера, которые являются слишком общими для моих требований, а DBSCAN дает мне нулевые кластеры, при этом каждая точка данных рассматривается как шум.
Приношу свои извинения, если что-то неясно, пожалуйста, не стесняйтесь просить меня уточнить что-нибудь. Заранее спасибо.