【发布时间】:2020-03-02 03:19:30
【问题描述】:
新手提醒
过去几个月我一直在学习 Python 中的机器学习,并取得了一些不错的成果。然而,目前,我被一个项目困住了,需要有更多经验的人指导(谷歌只能带你到现在看来????)。
我想要达到的目标
我有一个充满客户及其交易的虚拟数据集。我想根据他们的人口统计数据、消费分数和购物行为将他们聚类或分割成更小的“部落”。例如,一个“部落”描述可能是这样细化的:(男性,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-means 和 DBSCAN 算法运行了这些数据,但无济于事。 k-means 给了我 4 个集群,这对我的要求来说太笼统了,而 DBSCAN 给了我零个集群,每个数据点都被视为噪声。
如果有任何不清楚的地方,我深表歉意,请随时要求我澄清任何事情。提前致谢。
【问题讨论】:
-
我们在您的问题描述中遗漏了最重要的一项:什么定义了“最佳位置”?它是对集群距离或集群大小的某种度量,还是从对每一列的经验质量的理解中得出的?除非它是一个特定的编程问题,否则您不仅应该细化您的问题,还应该将帖子移至适当的组。 On topic、how to ask 和 ...the perfect question 在这里申请。
-
@Prune 指出。以后,我会寻找更合适的论坛。至于“甜蜜点”,我只是呼吁有更多经验的人知道答案。
标签: python machine-learning artificial-intelligence cluster-analysis