You need to enable JavaScript to run this app. 如何用Python实现K-means算法按应用使用行为将用户聚类为3组?
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现K-means算法按应用使用行为将用户聚类为3组?

用户应用使用数据的K-means三群组实现步骤

安装依赖工具

  • 不需要手搓K-means算法逻辑,直接用成熟的开源工具包跑通流程即可,安装命令:
    pip install pandas scikit-learn

第一步:基础数据清洗

你拿到的数据集以用户ID为行索引,只需要保留应用使用次数的数值列作为聚类特征,不要把用户ID本身加入特征计算:

import pandas as pd
# 读取CSV格式的数据集,指定用户ID为行索引
df = pd.read_csv("app_usage.csv", index_col="UserId")
# 填充缺失值为0,符合使用次数的语义(无记录即无使用)
df = df.fillna(0)
# 筛掉全0使用的不活跃用户,这类用户无有效行为,硬聚类会干扰目标群组的划分
total_usage = df.sum(axis=1)
inactive_user_mask = total_usage == 0
active_df = df[~inactive_user_mask]
inactive_df = df[inactive_user_mask].copy()
inactive_df['cluster_group'] = 'inactive'

第二步:必做的特征标准化

K-means基于样本间的欧氏距离计算相似度,你的数据中不同应用类别的使用次数数值范围差异很大(比如样例数据中教育类最高单次值为9,时钟类最高为2),不做缩放的话高数值列会完全主导距离计算,导致聚类结果失真:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_features = scaler.fit_transform(active_df)

第三步:运行K-means聚类

固定随机种子保证结果可复现,直接按需求设置3个聚类群组:

from sklearn.cluster import KMeans
# n_clusters设为3对应你的目标群组数量,random_state固定为42避免每次运行结果随机波动
kmeans = KMeans(n_clusters=3, random_state=42, n_init="auto")
cluster_labels = kmeans.fit_predict(scaled_features)
# 把聚类标签合并回活跃用户的数据集
active_df['cluster_group'] = cluster_labels
# 合并活跃用户聚类结果和之前标记的不活跃用户,得到完整结果
final_result = pd.concat([active_df, inactive_df])

结果解读方法

直接按群组维度计算每个应用类别的平均使用次数,就能快速对应每个群组的用户特征:

# 输出每个群组的平均使用行为画像
cluster_profile = final_result.groupby("cluster_group").mean()
print(cluster_profile)

结合你给出的样例数据,通常会得到类似的群组特征:

  • 某一群组通讯类使用次数均值高,其他类别数值偏低,对应普通社交类用户
  • 某一群组娱乐、教育类使用次数均值高,对应学习娱乐双高的学生类用户
  • 某一群组日历、金融类使用次数均值高,对应办公理财类用户
  • 标记为inactive的群组为无有效使用行为的不活跃用户

新手避坑提示

  • 不要跳过特征标准化步骤,这是新手做K-means时最容易出现结果偏差的原因
  • 不要把全0使用的用户硬塞进3个目标群组,否则算法会为了适配这类无行为用户打乱正常的群组划分
  • 因为你的样本量只有61个,如果某一群组仅包含1-2个用户,可单独检查这些用户的使用数据是否为离群异常值

内容的提问来源于stack exchange,提问作者ab20225

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 04:06:03