如何重构数据集以构建best_point_of_contact预测模型?
数据集重构方案(用于训练最佳联系人预测模型)
针对你的需求,核心是把任务列的用户信息转换成模型可识别的数值特征,具体步骤如下:
1. 处理多值任务列(owner、toppers)
这类列包含多个用户(比如owner列的A,B),需要拆分成二进制特征:每个用户对应一个新列,值为1表示该用户承担此任务,0表示不承担。
比如处理owner列后会生成owner_A和owner_B两列,原记录中这两列的值都是1;处理toppers列会生成toppers_A、toppers_B、toppers_C,对应的值都是1。
2. 处理单值任务列(editor、delegator、writer、financer)
这类列每个只对应一个用户,同样转换成二进制特征:比如editor列是A,就生成editor_A=1,其他用户对应的editor_*列值为0。
3. 整合特征与目标列
完成上述转换后,删掉原始的任务列(editor、delegator等),只保留生成的二进制特征列、name列(可选,用于标识记录)和目标列best_point_of_contact。
代码示例(用Pandas实现)
import pandas as pd # 你的原始数据 data = { 'name': ['newpaper1'], 'editor': ['A'], 'delegator': ['A'], 'writer': ['B'], 'owner': ['A,B'], 'financer': ['B'], 'toppers': ['A,B,C'], 'best_point_of_contact': ['A'] } df = pd.DataFrame(data) # 定义拆分多值列的函数 def split_multivalue_col(df, col_name): # 获取该列所有唯一用户 all_users = df[col_name].str.split(',', expand=True).stack().unique() for user in all_users: # 生成新列,标记用户是否参与该任务 df[f"{col_name}_{user}"] = df[col_name].apply(lambda x: 1 if user in x.split(',') else 0) return df # 处理多值列 df = split_multivalue_col(df, 'owner') df = split_multivalue_col(df, 'toppers') # 处理单值列 single_task_cols = ['editor', 'delegator', 'writer', 'financer'] for col in single_task_cols: all_users = df[col].unique() for user in all_users: df[f"{col}_{user}"] = df[col].apply(lambda x: 1 if x == user else 0) # 筛选特征列和目标列 feature_cols = [col for col in df.columns if col not in ['name', 'editor', 'delegator', 'writer', 'owner', 'financer', 'toppers', 'best_point_of_contact']] X = df[feature_cols] # 特征矩阵 y = df['best_point_of_contact'] # 目标变量
最终得到的X就是模型可以直接使用的特征,y是需要预测的最佳联系人,接下来就可以用分类模型(比如逻辑回归、随机森林)来训练了。
内容的提问来源于stack exchange,提问作者Divyessh
相关产品推荐
相关产品推荐

