科大讯飞2023-5G移动用户使用预测挑战赛

摘要:

合集:AI案例-ML-零售业
赛题:5G移动用户使用预测挑战赛
主办方:科大讯飞xDatawhale
主页:https://challenge.xfyun.cn/topic/info?type=5G-user&option=phb&ch=vWxQGFU
AI问题:二分类问题
数据集:用户基本信息和通信相关数据、比如用户话费信息、流量、活跃行为、套餐类型、区域信息等特征字段
数据集价值:预测用户是否为5G用户
解决方案:LightGBM

一、赛题描述

在2022世界互联网大会乌镇峰会期间发布的《世界互联网发展报告2022》显示,2022年第一季度,全球5G用户数增加7000万人,总数达到6.2亿人左右,5G人口覆盖率超25%。据爱立信及全球移动通信系统协会(GSMA)预测,到2022年底,全球5G用户数量将突破10亿人。对于通信运营商来说,面对如此庞大的5G市场,如何基于一些用户侧的信息进行用户画像,再进一步对于潜在的5G使用者进行精准的推销也是非常有帮助的。

本次比赛任务是根据用户基本信息和通信相关数据、比如用户话费信息、流量、活跃行为、套餐类型、区域信息等特征字段,然后通过训练数据训练模型,预测测试集中每个样本是否属于5G用户。

二、数据集说明

赛题数据由训练集train.csv、测试集据test.csv组成,包含60个字段,其中target字段为预测目标,主要特征字段分为两类cat和num,分别是离散型特征和数值型特征。

特征字段字段描述
id样本标识id
cat_0 ~ cat_19离散型特征
num_0 ~ num_37数值型特征
target目标变量,是否为5G用户

数据集版权许可协议

BY-NC-SA 4.0
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans

三、解决方案样例

工作原理

  1. 数据流
    • 原始数据 → 特征工程 → 训练/测试集 → 模型训练 → 预测 → 评估
  2. 预测任务
    • 二分类问题:预测用户是否为5G用户
    • 基于用户侧信息构建用户画像
  3. 模型特点
    • 梯度提升决策树算法
    • 高效处理大规模数据
    • 自动处理缺失值
    • 内置特征选择能力

业务价值

该项目帮助通信运营商:

  1. 理解5G用户特征
  2. 识别潜在5G用户
  3. 实现精准营销
  4. 优化5G市场策略

导入相关系统库

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import lightgbm as lgb
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.utils import class_weight
import joblib

【本样例运行环境的关键版本信息】

python 3.12.3

lightgbm 3.3.0

1、读入数据集

  • 从CSV文件读取训练数据(train.csv)和测试数据(test.csv)
  • 使用pandas、numpy等库进行数据处理
train_data = pd.read_csv("data/train.csv")
test_data = pd.read_csv("data/test.csv")

2、分析数据

  • 使用seaborn和matplotlib进行数据可视化
  • 分析用户基本信息、通信数据等特征字段
# 计算相关系数矩阵并四舍五入到小数点后三位
corr_matrix = train_data.corr().round(3)

# 设置绘图的尺寸
plt.figure(figsize=(12, 10))

# 绘制热力图
heatmap = sns.heatmap(
   corr_matrix,
   annot=False,       # 不在每个单元格中显示相关系数值
   cmap='coolwarm',   # 使用 'coolwarm' 颜色映射
   linewidths=0.5,    # 设置单元格之间的线宽
   linecolor='white', # 设置单元格之间的线颜色
   vmin=-1, vmax=1    # 设置颜色映射的范围
)

# 添加标题
plt.title('Feature Correlation Heatmap', fontsize=16)

# 显示图形
plt.show()

3、创建并训练模型

  • 使用LightGBM作为预测模型
  • 进行数据分割(train_test_split)
  • 使用网格搜索(GridSearchCV)进行超参数调优
  • 采用交叉验证(cross_val_score)评估模型
# X 和 y 的分离
X = train_data.drop(['id', 'target'], axis=1)
y = train_data['target']

# 分割训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# 参数调优
param_grid = {
   'learning_rate': [0.01, 0.1, 0.2],
   'n_estimators': [100, 200],
   'max_depth': [3, 5, 7],
   'subsample': [0.8, 1.0],
   'colsample_bytree': [0.8, 1.0]
}

grid_search = GridSearchCV(estimator=lgb.LGBMClassifier(random_state=42),
                          param_grid=param_grid,
                          cv=3,
                          scoring='accuracy',
                          n_jobs=-1,
                          verbose=2)

grid_search.fit(X_train, y_train)
print("Best parameters:", grid_search.best_params_)
best_model = grid_search.best_estimator_

# 评估模型
cv_scores = cross_val_score(best_model, X_train, y_train, cv=5, scoring='accuracy')
print("Cross-validated accuracy scores:", cv_scores)
print("Mean accuracy:", cv_scores.mean())

4、输出预测结果

使用joblib保存训练好的模型

pd.DataFrame(
  {
       "id": test_data['id'],
       # predict_proba 方法返回每个样本属于各个类别的概率。对于二分类问题,通常返回一个二维数组(负类的概率、正类的概率)
       # [:, 1] 提取了所有样本的正类概率
       "target": (best_model.predict_proba(test_data.drop(['id'], axis=1))[:, 1].round(4) > 0.5).astype(int)
  }
).to_csv('submit.csv', index=None)

源码开源协议

GPL-v3

四、获取案例套装

需要登录后才允许下载文件包。登录

发表评论