HW-DIGIX2021基于多目标多视图的用户留存周期预测

摘要:

合集:AI案例-ML-零售业
赛题:赛题1-基于多目标多视图的用户留存周期预测
主办方:华为终端云服务 + 华为南京研究所 + 江苏省人工智能学会(JSAI)
主页:https://www.saikr.com/DIGIX/2021
AI问题:回归预测问题、特征工程
数据集:连续60 天的用户行为数据和行为对应匹配的用户、歌曲、歌手数据。
数据集价值:预测未来30天内用户的留存情况
解决方案:支持多目标回归(Multi-Output Regression)的LightGBM框架

一、赛题描述

活跃留存周期预测通常使用单一视图做预测。但是在音乐领域,需结合用户关注的音乐话题信息进行表征学习、结合歌曲信息进行音频、歌词、歌曲名、评论文本的多模态表征、结合歌手、用户、歌曲构建知识图谱,基于用户在APP侧信息构造行为链路向量化,辅助多日留存的多目标优化。在业界探索下一代机器学习模型与多模态向量化中有非常深远的价值。

目标

本题目基于脱敏和采样后的数据信息,保证数据安全。利用连续30天的用户行为日志,用户信息,歌曲信息,歌手信息,歌曲音频信息,预测未来30天内用户的留存情况,按未来一日、两日、三日、七日、十四日、三十日分段。

评价指标

Area Under Curve (AUC)

提交文件

提交的结果需要包含三个文件:

  • submission.csv:模型预测的结果文件,格式和给出的标注文件一致
  • DIGIX Implementation Instruction.docx:一份 word 文档描述所使用的模型以及所使用的环境
  • Source Code.zip:所使用的源码打包文件

二、数据集内容

基本信息

比赛数据(采样+脱敏后)抽取的时间范围是连续60 天的用户行为数据和行为对应匹配的用户、歌曲、歌手数据。数据集包含:共60天的数据文件。选手分割数据,第1-30天为训练数据,另外第31-60天为测试数据。

数据结构

device_active.csv设备活跃表说明

| 字段 | 类型| 说明|
|device_id|Int|设备唯一标识|
|days|List|30天内设备活跃的相对日期列表|

user_info.csv用户特征表说明

| 字段 | 类型| 说明|
|device_id|Int|设备唯一标识|
|gender|Int|性别|
|age|Int|年龄区间段|
|device|Int|设备类型|
|city|Int|常驻城市|
|is_vip|Int|是否为VIP用户|
|device_id|Int|设备唯一标识|
|topics|List|关注的话题圈主题,为明文形式|

user_behavior.csv用户行为表说明

| 字段 | 类型| 说明|
|device_id | Int | 设备唯一标识 |
|day|Int| 相对日期 |
|pages|List|行为发生的一级页面,数字分别对应推荐、搜索、排行榜等。|
|music_ids|List|交互的音乐唯一标识|
|actions|List|核心用户行为序列,如播放,下载,分享,收藏,进入会员页,会员购买,搜索,搜索结果点击。存在device_active设备活跃表有记录,但user_behavior用户行为表没有记录的情况,这表明该用户有其他非核心行为,未被统计进来。|
|channel|Int|用户当日首次打开App的来源渠道|

music_info.csv 歌曲信息表说明

| 字段 | 类型| 说明|
|music_id|Int|歌曲唯一标识|
|title|String|歌曲名(明文)|
|artist_id|Int|音乐创作者唯一标识|
|album|String|专辑名称(明文)|
|is_paid|Int|是否为付费歌曲|
|comment|String|歌曲点赞最多的热评。数据为提取时刻的动态数据。|
|comment_cnt|Int|歌曲评论数。数据为提取时刻的动态数据|

artist_info.csv 歌手信息表说明

| 字段 | 类型| 说明|
|artist_id|Int|音乐创作者唯一标识|
|artist|String|音乐创作者,明文形式,。若有多个作者,用/分割。例如:杨宗纬/张碧晨。|
|style|List|音乐风格列表,明文形式。音乐风格数据不全,选手可自行增强数据。|

数据集版权协议

发布方:华为终端云服务
GPL2

三、基线解决方案

工作原理

1. 问题定义

  • 目标:预测用户在未来的留存周期(如留存天数、留存概率等)。
  • 多目标:可能同时预测多个留存相关指标(如 7 日留存率、30 日留存率、用户生命周期价值等)。
  • 多视图:数据来源多样化,例如:
    • 行为视图:用户点击、页面停留、功能使用等行为序列。
    • 交易视图:付费记录、消费金额、优惠券使用等。
    • 社交视图:好友关系、群组互动等。
    • 上下文视图:时间、地点、设备信息等。

2. 数据预处理

(1) 多视图特征融合

  • 特征拼接:将不同视图的特征横向合并(如用户行为统计 + 交易记录 + 设备信息)。
  • 跨视图交互:通过特征工程生成组合特征(如“最近一次消费金额” × “活跃天数”)。
  • 时间窗口统计:对行为和交易数据按时间窗口聚合(如过去 7 天的日均使用时长)。

(2) 缺失值处理

  • 对数值型特征使用均值/中位数填充,类别型特征使用众数填充。
  • 使用 LightGBM 内置的缺失值处理(use_missing=True)。

(3) 类别特征编码

  • 对类别型特征使用 Label Encoding 或 Target Encoding(需防泄漏)。
  • LightGBM 原生支持类别特征(categorical_feature 参数),可自动处理。

3. 模型构建

LightGBM 支持多目标回归(Multi-Output Regression),可通过以下方式实现:

  • 独立模型:为每个目标训练单独的 LightGBM 模型。
  • 联合训练:通过自定义损失函数,将多个目标的损失合并优化。

安装开发包

requirements.txt

python>=3.6.8
graphviz>=0.16
joblib>=1.0.1
lightgbm>=3.2.1
networkx>=2.4
numpy>=1.19.5
pandas>=1.1.5
scikit-learn>=0.24.1
scipy>=1.1.0
torch>=1.1.0
torchsummary>=1.1
torchvision>=0.3.0
tornado>=4.5.3
tqdm>=4.60.0

代码结构

>+--- dataset/2021_1_data
>+--- feature_builder
>|   +--- 0_generate_features.py
>+--- predictor
>|   +--- 0_retrain_and_predict.py
>|   +--- Utils.py
>+--- preprocess
>|   +--- 0_numbered_items.py
>|   +--- 1_format_active_logs.py
>|   +--- 2_format_user_info.py
>|   +--- 3_format_music_info.py
>|   +--- 4_format_user_behavior.py
>|   +--- utils.py
>+--- README.md
>+--- requirements.txt
>+--- trainer
>|   +--- 0_reformat_features.py
>|   +--- 1_impute_and_convert_to_lgb.py
>|   +--- 2_run_lightgbm.py
>|   +--- Features.py
>|   +--- Utils.py

预处理

python -u preprocess/0_numbered_items.py --user-info-file-name "dataset/2021_1_data/2_user_info.csv" --song-info-file-name "dataset/2021_1_data/3_music_info.csv" --user-numbered-file-name "dataset/2021_1_data/device_to_index.csv" --song-numbered-file-name "dataset/2021_1_data/music_to_index.csv"

python -u preprocess/1_format_active_logs.py --active-log-file-name "dataset/2021_1_data/1_device_active.csv" --train-log-file-name "dataset/2021_1_data/active_logs_to_train.csv" --predict-log-file-name "dataset/2021_1_data/active_logs_to_predict.csv" --user-index-file-name "dataset/2021_1_data/device_to_index.csv"

python -u preprocess/2_format_user_info.py --device-info-file-name "dataset/2021_1_data/2_user_info.csv" --user-index-file-name "dataset/2021_1_data/device_to_index.csv" --user-side-info-file-name "dataset/2021_1_data/user_with_side_information.csv" --phone-index-file-name "dataset/2021_1_data/phone_id_to_index.csv" --city-index-file-name "dataset/2021_1_data/city_id_to_index.csv"

python -u preprocess/3_format_music_info.py --music-info-file-name "dataset/2021_1_data/3_music_info.csv" --artist-info-file-name "dataset/2021_1_data/5_artist_info.csv" --song-index-file-name "dataset/2021_1_data/music_to_index.csv" --song-info-file-name "dataset/2021_1_data/song_with_side_information.csv" --style-index-file-name "dataset/2021_1_data/style_name_to_index.csv"

python -u preprocess/4_format_user_behavior.py --behaviors-file-name "dataset/2021_1_data/4_user_behavior.csv" --user-index-file-name "dataset/2021_1_data/device_to_index.csv" --song-index-file-name "dataset/2021_1_data/music_to_index.csv" --behavior-feature-file-name "dataset/2021_1_data/user_behaviors_with_static_info.csv"

生成特征数据

python -u feature_builder/0_generate_features.py --user-static-features "dataset/2021_1_data/user_with_side_information.csv" --song-static-features "dataset/2021_1_data/song_with_side_information.csv" --user-behaviors-features "dataset/2021_1_data/user_behaviors_with_static_info.csv" --training-active-logs "dataset/2021_1_data/active_logs_to_train.csv" --training-dataset "dataset/2021_1_data/total_features_to_train.csv" --predicting-active-logs "dataset/2021_1_data/active_logs_to_predict.csv" --predicting-dataset "dataset/2021_1_data/total_features_to_predict.csv" --temp-dir "dataset/2021_1_data" --bad-case "dataset/2021_1_data/missing_behaviors.csv"

训练

抽取有效的特征数据

python -u trainer/0_extract_valid_features.py --train-dataset-file-name "dataset/2021_1_data/total_features_to_train.csv" --train-features-file-name "dataset/2021_1_data/train_features.csv" --train-labels-file-name "dataset/2021_1_data/train_labels.csv"

填补缺失值并保存为 NumPy 格式

python -u trainer/1_impute_features.py --features-file-name "dataset/2021_1_data/train_features.csv" --labels-file-name "dataset/2021_1_data/train_labels.csv" --dataset-file-name-prefix "dataset/2021_1_data/lgb_train_dataset_" --preprocessor-file-name "dataset/2021_1_data/feature_selector.joblib"

训练模型

python -u trainer/2_run_lightgbm.py --features-file-name "dataset/2021_1_data/lgb_train_dataset_X.npy" --labels-file-name "dataset/2021_1_data/lgb_train_dataset_y.npy" --model-cache-path "dataset/2021_1_data/lgb_model_label_"

预测

python -u predictor/0_extract_features_for_predict.py --predict-dataset-file-name "dataset/2021_1_data/total_features_to_predict.csv" --predict-features-file-name "dataset/2021_1_data/predict_features.csv"

python -u predictor/1_predict_by_models.py --features-file-name "dataset/2021_1_data/predict_features.csv" --preprocessor-file-name "dataset/2021_1_data/feature_selector.joblib" --model-cache-path "dataset/2021_1_data/lgb_model_label_" --user-index-file-name "dataset/2021_1_data/device_to_index.csv" --result-file-name "dataset/2021_1_data/submission.csv"

源码开源协议

GPL-3.0 license

四、获取案例套装

文件包大小:2.5 GB

获取:零售业传统机器学习案例套装

发表评论