赛题名称:基于用户画像的商品推荐挑战赛2.0 赛题类型:数据挖掘 赛题链接👇:
https://challenge.xfyun.cn/topic/info?type=user-portrait-2023&ch=vWxQGFU
讯飞AI营销云基于深耕多年的人工智能和大数据技术,赋予营销智慧创新的大脑,以健全的产品矩阵和全方位的服务,帮助广告主用AI+大数据实现营销效能的全面提升,打造数字营销新生态。
基于用户画像的产品推荐,是目前AI营销云服务广告主的一项重要能力,本次对1.0赛题进行了升级,丰富了用户标签特征,为选手提供了更大的建模发挥空间,赛题选择了两款产品分别在初赛和复赛中进行用户付费行为预测,参赛选手需基于提供的样本构建模型,预测用户是否会购买相应商品。
本次赛题是一个二分类任务,特征维度主要包括:基本数据、用户标签、常驻地信息、机型信息4类特征,出于数据安全的考虑,所有数据均为脱敏处理后的数据。初赛数据和复赛数据特征维度相同。

本次竞赛的评价标准采用AUC指标。
比赛是一个典型的数据挖掘比赛,因此只需要提取特征训练模型即可。
读取数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
train_data = pd.read_csv("基于用户画像的商品推荐挑战赛2.0公开数据-初赛/train.csv")
test_data = pd.read_csv("基于用户画像的商品推荐挑战赛2.0公开数据-初赛/test.csv")
基础特征编码
train_data['brand_freq_encoding'] = train_data['brand'].map(train_data['brand'].value_counts())
test_data['brand_freq_encoding'] = test_data['brand'].map(train_data['brand'].value_counts())
train_data['brand_target_encoding'] = train_data['brand'].map(
train_data[train_data['brand'].isin(train_data['brand'].value_counts().index[:50])].groupby('brand')['label'].mean()
)
test_data['brand_target_encoding'] = test_data['brand'].map(
train_data[train_data['brand'].isin(train_data['brand'].value_counts().index[:50])].groupby('brand')['label'].mean()
)
train_data['model_freq_encoding'] = train_data['model'].map(train_data['model'].value_counts())
test_data['model_freq_encoding'] = test_data['model'].map(train_data['model'].value_counts())
train_data['province_freq_encoding'] = train_data['province'].map(train_data['province'].value_counts())
test_data['province_freq_encoding'] = test_data['province'].map(train_data['province'].value_counts())
train_data['province_target_encoding'] = train_data['province'].map(train_data.groupby('province')['label'].mean())
test_data['province_target_encoding'] = test_data['province'].map(train_data.groupby('province')['label'].mean())
train_data['city_freq_encoding'] = train_data['city'].map(train_data['city'].value_counts())
test_data['city_freq_encoding'] = test_data['city'].map(train_data['city'].value_counts())
train_data['city_target_encoding'] = train_data['city'].map(train_data.groupby('city')['label'].mean())
test_data['city_target_encoding'] = test_data['city'].map(train_data.groupby('city')['label'].mean())
进阶特征编码
import re
split_rule = re.compile(r'[:;]')
def split_enum_tag(tag):
if tag == "unkown":
return []
tags = tag.split('|')
tags = [split_rule.split(x) for x in tags]
tags = [[x[1], x[-1]] for x in tags]
return np.array(tags)
train_data['enum_tag'] = train_data['enum_tag'].apply(split_enum_tag)
test_data['enum_tag'] = test_data['enum_tag'].apply(split_enum_tag)
def feat_enum_tag(tag):
if len(tag) == 0:
return [0, 0, 0, 0, 0]
return [
tag.shape[0],
len(set(tag[:, 0])),
len(set(tag[:, 1])),
len(set([x[:4] for x in tag[:, 1]])),
len(set([x[4:6] for x in tag[:, 1]]))
]
train_enum_tag_feat = pd.DataFrame(train_data['enum_tag'].apply(feat_enum_tag))
train_enum_tag_feat = train_enum_tag_feat['enum_tag'].apply(pd.Series)
test_enum_tag_feat = pd.DataFrame(test_data['enum_tag'].apply(feat_enum_tag))
test_enum_tag_feat = test_enum_tag_feat['enum_tag'].apply(pd.Series)
模型训练与预测
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
model = LogisticRegression()
model.fit(
np.hstack(
[train_data.drop(['pid', 'brand', 'label','model', 'province', 'city', 'enum_tag', 'numeric_tag'], axis=1).fillna(0).values,
train_numeric_tag_feat.values,
train_enum_tag_feat.values]
),
train_data['label']
)
test_pred = model.predict_proba(
np.hstack(
[test_data.drop(['pid', 'brand','model', 'province', 'city', 'enum_tag', 'numeric_tag'], axis=1).fillna(0).values,
test_numeric_tag_feat.values,
test_enum_tag_feat.values]
)
)[:, 1]
pd.DataFrame({
'pid': test_data['pid'],
'label': test_pred.round(3)
}).to_csv('submit.csv', index=None)
完整代码见👇:
https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2023
# 竞赛交流群 邀请函 #

每天大模型、算法竞赛、干货资讯

内容中包含的图片若涉及版权问题,请及时与我们联系删除


评论
沙发等你来抢