如何基于队员信息构建pandas数据集训练模型预测队伍赛事排名
赛事队伍排名预测训练数据集构造方案
核心逻辑是按「单届赛事+单支队伍」为一行的粒度构造样本,所有特征绑定赛事开赛之前的已知信息,标签为该队伍本届赛事最终排名,完全适配队员每届变动的场景。
1. 标准数据集字段框架
你可以按照以下分类设置字段,可直接对齐你需要的结构:
- 基础标识字段:
event_id(赛事唯一ID)、event_year(赛事举办年份)、team_id(队伍唯一ID)、team_name(队伍名称) - 队员特征字段(两种实现可选):
- 聚合类:把本届该队伍所有队员的属性做统计聚合,比如
player_avg_rating(队员平均个人评分)、player_total_match_sum(队员累计参赛总次数)、player_top3_ratio(拿过赛事前三的队员占比)、pos_max_ability(各位置队员能力峰值) - 宽表类:如果单队参赛人数固定(比如电竞5人、球类11人),可以按
player_1_rating、player_1_match_count、player_2_rating…的格式单独存每个队员的属性,空位统一填0即可,适配树类模型训练
- 聚合类:把本届该队伍所有队员的属性做统计聚合,比如
- 队伍历史特征字段:
team_recent_3event_avg_rank(队伍近3届同类型赛事平均排名)、team_champion_count(队伍历史夺冠次数) - 赛事上下文字段:
event_total_teams(本届总参赛队伍数)、event_prize_level(本届赛事奖金量级) - 标签字段:
final_rank(该队伍本届赛事最终排名,即模型预测目标)
注意:所有队员、队伍特征都必须取对应赛事开赛之前的历史数据,禁止使用本届赛事过程中产生的战绩数据,避免数据泄露导致模型效果虚高
2. pandas构造代码示例
import pandas as pd # 提前准备4张原始基础表即可 # event_df:每届赛事的基础信息(赛事ID、年份、总参赛队、奖金等) # team_player_df:每届赛事每支队伍的参赛队员ID关联表 # player_df:所有队员的个人属性、历史战绩表 # rank_df:每届赛事所有队伍的最终排名结果表 # 第一步:聚合生成单队单届的队员特征 player_feature_df = team_player_df.merge( player_df, on="player_id", how="left" ).groupby( ["event_id", "team_id"], as_index=False ).agg( player_avg_rating=("personal_rating", "mean"), player_total_match_sum=("total_career_matches", "sum"), player_top3_ratio=("has_top3_experience", "mean") ) # 第二步:关联所有维度得到最终训练集 train_df = rank_df.merge( event_df, on="event_id", how="left" ).merge( player_feature_df, on=["event_id", "team_id"], how="left" # 可继续关联提前算好的队伍历史特征表 ).fillna(0)
3. 优化方向
- 如果需要支持输入任意人数的队员名单做预测,可以不用做聚合,将每个队员的特征序列化后存为
player_feature_list列,训练时用LSTM、Transformer等序列模型处理即可 - 可加入本届赛事的横向对比特征,比如当前队伍的队员平均评分在本届所有参赛队中的分位值
team_rating_percentile,提升模型对同赛事队伍水平差异的识别能力
内容的提问来源于stack exchange,提问作者BKBlaze king
相关产品推荐
相关产品推荐

