公司动态

游戏行业数据分析:AI 玩家行为聚类与付费预测模型实战

📅 2026/7/22 11:47:37
游戏行业数据分析:AI 玩家行为聚类与付费预测模型实战
游戏行业数据分析AI 玩家行为聚类与付费预测模型实战大家好我是朱大喜最近在游戏行业做了个有意思的项目——用 AI 帮运营团队识别高潜付费玩家。今天就和大家聊聊怎么通过行为聚类和付费预测模型把游戏数据玩出花来。一、业务背景与数据画像游戏行业的用户生命周期管理和付费转化一直是核心命题。我们合作的是一款卡牌类手游DAU 大约 50 万但付费率不到 3%。运营团队面临的问题是新用户首周流失率高达 60%而老用户的付费意愿也在逐年下降。整个项目的数据源主要来自三张核心表用户基础信息表注册时间、渠道、设备型号、游戏行为日志表登录时长、副本通过率、PVP 场次、社交互动次数、以及付费流水表充值金额、充值次数、首充时间、付费道具类型。数据量级在每日 200GB 左右所以我们在 Spark 上做了离线特征工程。在开始建模之前我们需要想清楚一个核心问题什么样的玩家更可能付费是那些天天上线肝副本的硬核玩家还是那些偶尔上线但每次充大额的氪金大佬这个答案决定了我们后续特征工程的方向。二、行为聚类给玩家贴标签聚类的核心目的是将玩家按行为模式分成不同群体。我们选取了以下特征维度活跃度指标近 7 天登录天数、日均在线时长、日均操作次数战斗投入度副本完成率、PVP 参与次数、战斗胜率社交活跃度好友数量、公会活跃度、聊天消息数成长速度等级提升速度、装备更新频率数据标准化后我们先用肘部法则确定最佳 K 值然后用 K-Means 进行聚类。以下是用 Python 实现的核心代码。import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans import matplotlib.pyplot as plt # 1. 加载玩家行为特征数据 # 从 Spark 离线特征工程输出的 Parquet 文件中读取 df pd.read_parquet(player_features.parquet) # 选取用于聚类的特征列 cluster_features [login_days_7d, avg_online_minutes, avg_ops_per_day, dungeon_completion_rate, pvp_count_7d, win_rate, friend_count, guild_activity_score, chat_msg_count, level_growth_rate, equip_update_freq] # 2. 数据标准化 # K-Means 对尺度敏感必须先标准化 scaler StandardScaler() X_scaled scaler.fit_transform(df[cluster_features]) # 3. 肘部法则确定最佳 K 值 # 计算不同 K 值下的簇内平方和Inertia inertia_values [] K_range range(1, 11) for k in K_range: kmeans KMeans(n_clustersk, random_state42, n_init10) kmeans.fit(X_scaled) inertia_values.append(kmeans.inertia_) # 绘制肘部曲线图 plt.figure(figsize(10, 5)) plt.plot(K_range, inertia_values, bo-, linewidth2) plt.xlabel(聚类数 K) plt.ylabel(簇内平方和 (Inertia)) plt.title(肘部法则 - 确定最佳聚类数) plt.grid(True, alpha0.3) # 通常选择曲线拐点处的 K 值这里 K5 较为合适 # 4. 执行 K-Means 聚类 best_k 5 kmeans KMeans(n_clustersbest_k, random_state42, n_init10) df[cluster_label] kmeans.fit_predict(X_scaled) # 5. 分析每个聚类的特征画像 # 输出每个簇在各特征上的均值帮助理解玩家类型 cluster_profile df.groupby(cluster_label)[cluster_features].mean() print( 各聚类群体特征画像 ) print(cluster_profile) # 重命名聚类标签方便业务理解 cluster_name_map { 0: 轻度休闲玩家, # 各项指标均偏低 1: 社交活跃玩家, # 社交和聊天指标突出 2: 硬核战斗玩家, # 战斗相关指标高 3: 高潜付费玩家, # 综合指标优秀历史有付费行为 4: 沉睡流失玩家 # 活跃度持续下降 } df[player_segment] df[cluster_label].map(cluster_name_map) print(f\n 各群体人数分布 ) print(df[player_segment].value_counts())聚类结果很有意思。我们发现硬核战斗玩家虽然活跃度最高但付费转化率只有 4.2%。反而是社交活跃玩家群体付费转化率达到了 8.7%。这个洞察直接改变了运营策略——与其给那些天天肝副本的玩家推付费礼包不如在公会活动和社交场景中嵌入付费引导。三、付费预测模型搭建聚类帮我们了解了玩家结构但要精准找到明天可能付费的玩家还需要一个预测模型。我们选择了 XGBoost 作为主力模型因为它处理表格数据的表现一直很稳定而且自带特征重要性分析方便后续向业务团队解释。样本构造上我们以过去 7 天的行为数据作为特征窗口预测第 8 天是否会发生付费行为。这是一个典型的二分类问题。正负样本比例约为 1:33属于严重不均衡所以我们在训练时设置了scale_pos_weight参数来调整权重。import xgboost as xgb from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, roc_auc_score, confusion_matrix # 1. 构造训练样本 # 特征窗口过去7天的行为特征 # 标签第8天是否付费1付费, 0未付费 feature_cols [login_days_7d, avg_session_duration, dungeon_completions, pvp_matches, social_events, prev_pay_amount_30d, prev_pay_times_30d, days_since_last_pay, resource_balance, level, vip_level, cumulative_pay_amount] X df[feature_cols] y df[will_pay_next_day] # 目标变量 # 2. 划分训练集和测试集 # 按时间顺序划分避免数据泄露 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42, stratifyy ) # 3. 训练 XGBoost 模型 # 计算正负样本比例用于处理不均衡 neg_pos_ratio (y_train 0).sum() / (y_train 1).sum() model xgb.XGBClassifier( n_estimators200, # 树的数量 max_depth6, # 树的最大深度防止过拟合 learning_rate0.05, # 学习率 scale_pos_weightneg_pos_ratio, # 处理样本不均衡 subsample0.8, # 每棵树随机采样 80% 数据 colsample_bytree0.8, # 每棵树随机采样 80% 特征 random_state42, eval_metricauc # 使用 AUC 作为评估指标 ) model.fit( X_train, y_train, eval_set[(X_test, y_test)], verboseFalse ) # 4. 模型评估 y_pred_proba model.predict_proba(X_test)[:, 1] y_pred model.predict(X_test) # AUC 是衡量排序能力的关键指标 auc_score roc_auc_score(y_test, y_pred_proba) print(f测试集 AUC 分数: {auc_score:.4f}) print(\n 分类报告 ) print(classification_report(y_test, y_pred, target_names[未付费, 付费])) # 5. 特征重要性分析 importance_df pd.DataFrame({ feature: feature_cols, importance: model.feature_importances_ }).sort_values(importance, ascendingFalse) print(\n Top 10 重要特征 ) print(importance_df.head(10))模型在测试集上的 AUC 达到了 0.86Top 3 重要特征分别是历史 30 天累计付费金额、距上次付费天数、VIP 等级。这符合直觉——有过付费历史的玩家更可能再次付费。四、模型落地与运营闭环模型再准如果没法落地就是摆设。我们把这套系统做成了每日 T1 调度凌晨 2:00Spark 任务跑完前一天的日志数据产出玩家特征表凌晨 4:00Python 脚本加载特征表执行聚类和预测凌晨 5:00结果写入 MySQL通过企业微信机器人推送 Top 1000 高潜付费玩家名单上午 10:00运营同学在 CRM 后台查看今日推荐触达用户一键推送优惠券或限定礼包上线两个月后付费转化率从原来的 2.8% 提升到了 4.1%付费 ARPU 提升了 18%。最关键的是运营团队从盲推变成了精准触达活动的 ROI 有了明显提升。五、总结这个项目让我深刻体会到数据分析的价值不在于模型有多复杂而在于你是否能把数据洞察翻译成业务语言。K-Means XGBoost 的组合虽然经典但在游戏行业这个场景下确实好使。关键收获有三点第一特征工程阶段一定要和业务方反复对齐比如社交活跃度怎么定义直接决定了聚类结果的质量第二样本不均衡问题不能忽视否则模型会倾向于全部预测为不付费——那就没有任何业务价值了第三模型上线只是开始持续监控和迭代才是正经事。如果你也在做类似的项目欢迎在评论区交流。下篇文章我们聊聊 RFM 模型的工程化落地不见不散