根据地点、时间和工资率计算工作日期的可能性

数据挖掘 机器学习
2022-02-22 08:10:53

我刚刚开始尝试一些机器学习。作为一名 C# 开发人员,我玩过 ML.NET。我现在想试试看它是否可以帮助解决现实世界的问题。

我们有一个系统,可以邀请工作人员在多家医院轮班工作,如果工作人员有兴趣,他们会联系我们的管理团队,然后被分配到轮班。

由于日期/日期、地点、工作时间,当然还有可用的工资,许多班次很难分配工作人员。因此,我们经常不得不提高每小时支付的费率。当比率增加时,班次被填补的机会就会大得多。

我的班次如下所示。

    // SHIFT CLASS
    int shiftID 
    int locationID
    int shiftGradeID 

    DateTime shiftStartDate 
    DateTime shiftEndDate 

    decimal hourlyRate 
    decimal hours 

    int assignedLocumID 

使用上面的数据,我将不胜感激任何有助于解决问题的建议或见解;

根据位置、日期(日、月)、开始时间、结束时间、等级、小时费率和小时数,我如何计算出轮班被填补的百分比。

理想情况下,我想尝试使用 ML.NET,但是我不确定从哪里开始。我有 5 年的数据来训练模型。感谢您提供的任何帮助。

2个回答

StatsSorceress 正确地表明使用逻辑回归。这几乎是该方法的教科书用例。如果您也在寻找示例代码,那么您可以查看这个示例(它使用 ML.NEThttps://medium.com/machinelearningadvantage/use-c-and-ml-net-machine-learning-to-predict-纽约出租车票价 519546f52591

对您而言,一些不同之处在于您的“标签”或您试图预测的值可能需要计算。例如,在上面的博客中,用户有一个现成的标签,出租车费,她想预测。在您的情况下,您正在查看是否会填充班次的% 值。因此,您必须添加一个名为“%filled_or_something”的附加列,该列可以通过一个简单的 SQL 查询将您的输入特征(日、月、小时、开始时间、结束时间、工资等)组合在一起来计算。因此,例如,如果您有 20 条“星期日/三月/6 日(小时)/23:00/06:00/13 美元(每小时)”的记录,并且在所有这 20 天内都已填写,那么该列将显示为 100% 但如果仅填写这 20 条记录中的 10 条,则显示为 50%。

当然,这也引出了一个问题,如果您需要做的只是上述内容,那么鉴于所有特征都是有限的,为什么我们不能简单地将所有唯一组合分组并找到 % 并使用这个值本身?根据我的说法,答案是 LR 还表明每个功能的重要性,因此例如,如果您要引入新的日期/新的轮班时间/更多的小时数,则 LR 模型甚至应该能够预测这些,因为它了解与每个特征相关的权重。

这应该使您最终能够使用上面博客中解释的逻辑回归模型。希望这在某种程度上有所帮助:)

如果您正在寻找代码,我不熟悉 C#。我的回答将集中在理论上。

tl; dr大多数与机器学习相关的软件包都具有某种内置的逻辑回归功能。这就是我在这里推荐的。

更多详情:

我会从一个基本模型开始,然后逐步上升。听起来这是您可以使用回归模型计算出来的。

基于您的问题:“根据位置、日期(日、月)、开始时间、结束时间、等级、小时费率和小时数,我如何计算出轮班被填补的百分比?”,我了解您想要:

  • 输出:班次被填满的概率
  • 输入:位置、日期、开始时间、结束时间、成绩、每小时费率、小时数(这些是x的下面)

如果您熟悉逻辑回归:

log(p1p)=β0+β1x1+β2x2+...+βkxk

该模型的输出是单个班次被填充(相对于未填充)的对数几率。请注意,这可以重写为:

p=eβ0+β1x1+β2x2+...+βkxk1eβ0+β1x1+β2x2+...+βkxk

在哪里p是班次被填补的概率。

我会首先为每个班次拟合一个逻辑回归模型。

请注意:多项式回归会给您在 k 个可能的班次中 1 个班次被填充的概率,但我认为这不是您要寻找的。

在看到效果如何(将模型预测结果与数据中的实际百分比进行比较)之后,如果有必要,我会建立一个条件模型来考虑填补班次的概率,因为其他班次已经被填补了。不知道我会怎么做,但希望这能给你一个起点!

根据 Vikram Murthy 的回答进行编辑:

我意识到我忘了提及:在这种情况下,您的响应变量将是 0 或 1,表示是否填充了班次。因此,对于每个班次,您将有一列指示该班次是否已满。那是被预测的列。这类似于使用“虚拟变量”。

例如,如果您有两个班次,您的列将是:

loc, day, month, starttime, endtime, grade, hourlyrate, hours, shift1_f, shift2_f

所以你的数据可能看起来像这样:

loc, day, month, starttime, endtime, grade, hourlyrate, hours, shift1_f, shift2_f
A, 1, 2, 12:00, 8:00, 1, 34.25, 8, 1, 0
A, 1, 2, 12:00, 8:00, 1, 34.25, 8, 0, 1
A, 1, 2, 12:00, 8:00, 1, 34.25, 8, 1, 1
A, 1, 2, 12:00, 8:00, 1, 34.25, 8, 0, 0

在此设置中,这将表明在第一种情况下填充了班次 1,在第二种情况下填充了班次 2,在第三种情况下都进行了班次,而在最后一种情况下没有班次。

您的两个逻辑回归模型将像这样设置:

shift1_f = loc + day + month + starttime + endtime + grade + hourlyrate + hours

shift2_f = loc + day + month + starttime + endtime + grade + hourlyrate + hours

比例将由程序自动计算出来;没有必要自己弄清楚它们并将它们输入到我见过的任何逻辑回归应用程序中。