Datawhale AI夏令營第一期(機器學習方向)Task2筆記:用戶新增預測挑戰賽——從業務理解到技術實現
一、任務核心:業務與技術的“翻譯”
本次Task聚焦“用戶新增預測挑戰賽”的核心邏輯,核心目標是鍛煉“將業務問題轉化為AI技術問題”的能力,具體包含兩大能力:
- 業務透視眼:從“識別新增用戶”的業務需求倒推特征設計邏輯
- 數據診斷術:通過可視化等手段挖掘特征中的有效信息
二、賽題核心認知:二分類任務的本質
1. 任務定義
“用戶新增預測挑戰賽”是由科大訊飛主辦的二分類任務,需基于用戶行為數據預測用戶是否為新增用戶(目標字段is_new_did
,1表示新增,0表示非新增),評價指標為F1分數(分數越高模型性能越好)。
2. 業務與技術價值
類型 | 具體價值 |
---|---|
行業價值 | 精準預測用戶增長趨勢、優化產品迭代方向;降低用戶獲取成本;為AI落地提供量化依據 |
技術價值 | 解決實際用戶增長預測問題;驗證AI在用戶行為分析中的有效性;建立可復用方法論 |
3. 數據基礎
- 輸入數據:包含15個原始字段的用戶行為事件記錄,核心字段包括:
did
:用戶唯一標識(關鍵)common_ts
:事件發生時間戳(時間特征來源)udmap
:事件自定義屬性(JSON格式,含助手/插件ID)- 其他字段:設備品牌、網絡類型、地域信息等基礎屬性
- 輸出要求:CSV文件,僅含
is_new_did
列(值為0或1)
4. 數據關鍵特征(探索發現)
- 測試集中93%的用戶(
did
)出現在訓練集中(可直接復用已知標簽) - 訓練集中88%的用戶標簽為0(正負樣本不平衡)
- 事件級數據需轉化為用戶級特征(需按
did
聚合)
三、解題核心:要點、難點與思路
1. 核心要點與難點
類別 | 具體內容 |
---|---|
核心要點 | 從事件級數據提取用戶級特征;處理高維稀疏特征;平衡正負樣本;捕捉時間敏感特征 |
難點 | 用戶行為聚合(事件→用戶);高維稀疏特征處理;樣本不平衡;時間模式捕捉 |
2. 基礎解題思路
- 模型選擇:優先樹模型(如LightGBM),原因是訓練速度快、對高維稀疏特征處理友好
- 特征方向:時間特征(時段、行為間隔等)、用戶行為聚合特征(行為次數、首次/末次行為時間等)
- 樣本處理:利用“測試集與訓練集用戶重疊”特性——已知標簽直接復用,未知標簽建模預測
四、Baseline方案:從設計到實現
1. 方案設計邏輯
模塊 | 具體設計 | 依據/優勢 |
---|---|---|
特征設計 | 提取時間特征(時段、停留時長等) | 符合用戶行為分析理論,捕捉行為模式 |
模型選擇 | LightGBM | 穩定性高、訓練效率快、對預處理需求低 |
驗證方法 | 五折交叉驗證 | 避免單次驗證的隨機性,提升模型評估可靠性 |
閾值優化 | 基于F1-score動態調整閾值 | 平衡精確率與召回率,適配樣本不平衡場景 |
2. 核心優勢與待改進點
類別 | 具體內容 |
---|---|
方案優勢 | - 采用五折目標編碼,避免數據泄露 - 基于LightGBM的并行訓練,速度比XGBoost快3-5倍 |
待改進點 | - udmap (JSON字段)未充分解析- 缺乏特征重要性篩選 - 未處理設備品牌長尾分布 |
3. 核心代碼邏輯
(1)交叉驗證建模
通過分層K折(Stratified K-Fold)確保各折中正負樣本比例一致,結合早停機制(early stopping)防止過擬合:
n_folds = 5
kf = StratifiedKFold(n_splits=n_folds, shuffle=True, random_state=42)for fold, (train_idx, val_idx) in enumerate(kf.split(X_train, y_train)):X_tr, X_val = X_train.iloc[train_idx], X_train.iloc[val_idx]y_tr, y_val = y_train.iloc[train_idx], y_train.iloc[val_idx]# 創建數據集train_set = lgb.Dataset(X_tr, label=y_tr)val_set = lgb.Dataset(X_val, label=y_val)# 模型訓練(早停機制)model = lgb.train(params, train_set,num_boost_round=5000,valid_sets=[train_set, val_set],callbacks=[lgb.early_stopping(stopping_rounds=200), lgb.log_evaluation(200)])
(2)閾值優化(最大化F1)
默認0.5閾值未必最優,針對正樣本稀少場景(如本任務),在0.1-0.4范圍搜索最優閾值:
def find_optimal_threshold(y_true, y_pred_proba):best_threshold = 0.5best_f1 = 0# 聚焦正樣本稀少場景的候選閾值for threshold in [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4]:y_pred = (y_pred_proba >= threshold).astype(int)f1 = f1_score(y_true, y_pred)if f1 > best_f1:best_f1 = f1best_threshold = thresholdreturn best_threshold, best_f1
五、上分思路:快速提升方向
1. 特征工程優化
- 解析
udmap
:提取JSON中的botId
、pluginId
,構建用戶使用的助手/插件數量、類型等特征 - 時間特征深化:用戶首次/末次行為時間、行為間隔、活躍時段分布(如是否在工作日活躍)
- 用戶行為聚合:按
did
聚合事件,計算行為次數、涉及模塊/事件類型數量等
2. 數據利用優化
- 復用已知標簽:測試集中與訓練集重疊的
did
,直接使用訓練集標簽(無需預測) - 處理長尾分布:對設備品牌等長尾特征進行分組(如合并低頻品牌為“其他”)
3. 模型與驗證優化
- 特征篩選:基于特征重要性剔除無效特征,減少噪聲
- 樣本平衡:采用SMOTE等方法處理正負樣本不平衡(需注意避免數據泄露)
- 模型融合:結合LightGBM與XGBoost、CatBoost等模型的預測結果
六、總結與收獲
本次Task通過“用戶新增預測”案例,系統學習了從業務理解到技術實現的全流程:
- 明確二分類任務的核心是“平衡精確率與召回率”(F1指標的意義)
- 掌握了基于用戶行為數據的特征設計邏輯(時間特征、聚合特征)
- 理解了Baseline方案的設計思路(模型選擇、交叉驗證、閾值優化)
- 獲得了上分的具體方向(特征深化、數據復用、模型優化)
后續將基于這些思路,進一步實踐進階的特征工程與模型調優方法。