You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用for循环按Employee_ID分组计算各员工利润预测MAE

按员工分组的线性回归利润预测及MAE计算方案

问题背景

现有时间序列DataFrame记录员工月度利润数据,已实现全局线性回归预测利润并计算MAE,现在需要按Employee_ID分组,为每个员工单独训练模型并输出对应MAE,期望输出格式如下:

Mean Absolute Error for Employee 111 is : 24.09
Mean Absolute Error for Employee 222 is : 12.09

实现思路

  1. 保留关键字段:预处理时不急于将日期设为索引或删除核心字段,确保Employee_ID可用于分组
  2. 分组遍历处理:通过groupby('Employee_ID')拆分数据,获取每个员工的独立子数据集
  3. 单员工模型训练:对每个子数据集重复执行训练集(7-8月)/测试集(9月)划分、模型训练、预测及MAE计算流程
  4. 格式化输出:按指定格式打印每个员工的MAE结果

完整代码实现

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn import metrics
from copy import deepcopy

# 原始数据集(可替换为你的实际数据加载逻辑)
df = pd.DataFrame({
    'Employee_ID': [111,111,111,222,222,222],
    'Age': [43,43,43,55,55,55],
    'Start_Date': ['01/07/2020 9:00','01/08/2020 9:00','01/09/2020 9:00',
                   '01/07/2020 9:00','01/08/2020 9:00','01/09/2020 9:00'],
    'End_Date': ['30/07/2020 9:04','30/08/2020 9:04','30/09/2020 9:00',
                 '30/07/2020 9:04','30/08/2020 9:00','01/09/2020 9:00'],
    'Profits': [7772.14,4352.46,4532.66,5643.73,7685.15,4573.53]
})

# 日期格式转换
df['Start_Date'] = pd.to_datetime(df['Start_Date'], dayfirst=True)

# 按员工ID分组遍历
for emp_id, emp_data in df.groupby('Employee_ID'):
    # 按日期排序
    emp_data_sorted = emp_data.sort_values(by='Start_Date')
    
    # 划分训练集(7-8月)和测试集(9月)
    train_data = emp_data_sorted[(emp_data_sorted['Start_Date'] >= '2020-07-01') & 
                                 (emp_data_sorted['Start_Date'] <= '2020-08-30')]
    test_data = emp_data_sorted[(emp_data_sorted['Start_Date'] >= '2020-09-01') & 
                                (emp_data_sorted['Start_Date'] <= '2020-09-30')]
    
    # 准备特征与目标变量(排除非特征字段)
    X_train = deepcopy(train_data.drop(['Profits', 'Employee_ID', 'Start_Date', 'End_Date'], axis=1))
    y_train = train_data['Profits']
    X_test = deepcopy(test_data.drop(['Profits', 'Employee_ID', 'Start_Date', 'End_Date'], axis=1))
    y_test = test_data['Profits']
    
    # 训练线性回归模型
    regressor = LinearRegression()
    regressor.fit(X_train, y_train)
    
    # 预测并计算MAE
    y_pred = regressor.predict(X_test)
    mae = metrics.mean_absolute_error(y_test, y_pred)
    
    # 按指定格式输出结果
    print(f'Mean Absolute Error for Employee {emp_id} is : {mae:.2f}')

代码说明

  • 分组逻辑:groupby('Employee_ID')确保每个员工的数据独立处理,避免不同员工数据互相干扰
  • 日期筛选:使用日期范围条件替代索引切片,适配分组后的数据结构
  • 特征清洗:训练时排除利润、员工ID、日期等非预测特征,仅保留有效输入(示例中为Age)
  • 结果格式化:通过f-string实现指定格式的输出,MAE保留两位小数

内容的提问来源于stack exchange,提问作者MohammedE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:15:34