我正在尝试创建一个预测任务持续时间的回归模型。我拥有的训练数据包含大约 4 万个已完成的任务,其中包含以下变量:
- 谁执行了任务(约 250 个不同的人)
- 执行任务的项目的哪个部分(子项目)(约 20 个不同的部分)
- 任务类型
- 任务的开始日期(10 年的数据)
- 必须完成任务的人估计需要多长时间
- 此任务完成的实际持续时间
持续时间可以在半小时到几百小时之间变化,但严重偏斜(大多数任务在 10 小时内完成)。在对数尺度上,分布仍然略微向右倾斜。
预测不一定是完美的,但我正在努力提高人们的估计。要问的一个问题是“我们可以使用什么度量来更好地定义? ” 我认为最好的衡量标准是均方误差 (MSE),因为它对大误差的权重比小误差要差得多。
在我转向机器学习之前,我尝试了一些简单的方法,例如通过平均或中值误差调整估计值,通过按人分组的平均/中值误差进行调整,按子项目分组,但这些方法中的每一个都碰巧表现更差。
对于机器学习,我遇到的第一个问题是分类变量的数量,因为对于大多数模型来说,这些变量必须以某种方式进行编码(例如 one-hot)。无论如何,我尝试应用一些线性模型,例如使用随机梯度下降,我的方法是:
- One-hot 对分类特征进行编码
- 将日期转换为 unix 时间戳
- 规范化所有尚未介于 0 和 1 之间的特征
- 将数据拆分为 80/20 学习和测试集。
- 使用网格搜索交叉验证和学习集尝试找到最佳超参数并拟合模型。
- 用测试集预测
- 计算错误/分数
现在我注意到的一件事是结果变化很大:一次运行的 MSE 接近另一次运行的两倍(150 和 280)。还有一点就是大家估计的MSE在80左右,所以我的模型表现差一点。
在我努力提高性能的过程中,我偶然发现了这个问题,有人建议使用生存模型。现在我对这些模型不熟悉,但听起来很有希望,但在我最初的测试中,它对于我的目的来说太慢了(数据集太大)。
在建议使用生存模型(和维基百科页面)的同一个数据科学答案中,他们还提到了泊松回归,但我不确定如何将其应用于我的案例。
长话短说:我只有两个问题: 1. 我使用 SGD 的方法“正确”吗?你认为我可以用它改善结果吗?2. 其他模型是否更适合这种预测,如果是,你能解释一下我将如何使用它们吗?