• 赛题名称:基于用户画像的商品推荐挑战赛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

 竞赛交流群 邀请函  #

△长按添加竞赛小助手

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

与 36000+来自竞赛爱好者一起交流~

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