寻求知识发现的建议

数据挖掘 回归 可能性
2021-10-01 06:14:22

背景资料

我在佛罗里达州的一个消防部门工作,消防队长向我提出了一个问题;在 2018 日历年的任何特定时间,有多少消防车在忙碌,有多少可用,有多少待命,有多少停止使用?使用 SQL Server 数据库,我能够将这些信息提炼成表格数据。

我可以使用的软件。

此外,由于数据在 SQL Server 中,我可以按小时、工作日、月份等解析日期时间戳。然后使用 Python 或 Excel,我可以生成统计测试和单变量统计数据和图表。我对 R 的经验不多。因此我的工具是 SQL Server、R、Python 和 Excel。

数据

在 2018 年 1 月 1 日 00:02:31.800 时,主键为 21546912 的第一条记录有 1 辆消防车在工作,9 辆消防车可以工作,0 辆待命或停止服务。在整个一年中,我有 104,179 次观察结果显示在那个时间戳上有多少正在工作、可用、待命或停止服务。我在我的问题下方以逗号分隔值文件的形式附上了 30 条记录,供您查看示例。

问题!

那么我该如何处理这些数据呢?我已经生成了直方图,显示了 FireTrucksWorking 等的频率。我可以对这些数据执行回归等统计测试吗?我如何为这个数据集带来意义?我可以发现数据集的任何一般模式吗?我可以根据这些数据创建一个概率模型吗?在 7 月份的 08:00 时,N 辆消防车工作的概率为 x%?你会在这个数据集上使用排队论吗?

我愿意接受所有建议。此时我有一个大数据集,但它实际上只是一堆数字,我如何从这些数字中产生意义?

这是在数学交流中交叉发布的。但在这里我做了以下修改。我正在寻找某种类型的知识发现,它将向我展示关于我的数据集的一些肉眼无法看到或人脑无法辨别的信息。例如:“在 08:00 到 12:00 的时间里工作的可能性比一天中的其他时间要高得多”。“我的数据中是否存在我无法识别的模式”?你对此有什么想法吗?

三十条数据样本记录

PrimaryKey,DateTimeStamp,FireTrucksWorking,FireTrucksAvailableForWork,FireTrucksStandingBy,FireTrucksOutOfService
21546912,2018-01-01 00:02:31.800,1,9,0,0
21546921,2018-01-01 00:04:46.720,1,9,0,0
21546950,2018-01-01 00:09:39.400,1,9,0,0
21546951,2018-01-01 00:09:47.320,2,8,0,0
21546955,2018-01-01 00:11:16.780,3,7,0,0
21546959,2018-01-01 00:12:04.840,2,8,0,0
21546962,2018-01-01 00:12:09.030,3,7,0,0
21546963,2018-01-01 00:12:14.470,3,7,0,0
21546966,2018-01-01 00:12:17.790,3,7,0,0
21546967,2018-01-01 00:12:21.240,2,8,0,0
21546970,2018-01-01 00:12:40.240,2,8,0,0
21546973,2018-01-01 00:12:46.720,2,8,0,0
21546990,2018-01-01 00:14:24.610,2,8,0,0
21547002,2018-01-01 00:16:03.130,2,8,0,0
21547036,2018-01-01 00:19:59.450,1,9,0,0
21547043,2018-01-01 00:21:21.950,0,10,0,0
21547064,2018-01-01 00:24:50.470,0,10,0,0
21547065,2018-01-01 00:25:13.000,0,10,0,0
21547165,2018-01-01 00:43:31.130,0,10,0,0
21547344,2018-01-01 01:15:00.980,1,9,0,0
21547361,2018-01-01 01:16:58.320,1,9,0,0
21547383,2018-01-01 01:21:38.130,1,9,0,0
21547421,2018-01-01 01:30:42.250,0,10,0,0
21547436,2018-01-01 01:33:30.320,1,9,0,0
21547442,2018-01-01 01:33:48.470,1,9,0,0
21547449,2018-01-01 01:33:58.780,1,9,0,0
21547474,2018-01-01 01:37:30.550,1,9,0,0
21547484,2018-01-01 01:39:12.350,1,9,0,0
21547487,2018-01-01 01:40:41.290,0,10,0,0
21547510,2018-01-01 01:47:02.420,0,10,0,0
2个回答

有很多不同的可能性。在论坛中通过这里获取消息有点困难。但我尝试专注于一件相对容易实现的事情:

您可以做的最简单的事情之一就是进行线性回归。您的因变量 (y) 将是“正在工作的消防车”(或正在工作的消防车的份额)。你可以根据时间来估计这个。因此,您可以(例如)生成指示变量(如果某事为真,则为 =1,否则为 =0),以指示诸如工作日、一天中的某个小时之类的内容。将此指标用作回归中的解释 (x) 变量。

结果将是,每个指标都会向您显示某个时间点的平均卡车使用量。假设指标 A 是“星期一”,B 是“16:00”,您将看到在这个时间窗口内平均派出了多少辆卡车。您还可以轻松查看差异是否显着。

过去,此类模型用于估计呼叫中心的呼叫者数量。这被称为“虚拟变量回归”(至少在某些统计领域)。https://en.m.wikipedia.org/wiki/Dummy_variable_(统计)

请注意,与基线相比,您会观察到每个“虚拟”变量的影响。假设您使用卡车 (y),并且只有 1 个指标/虚拟对象,即“星期一”。假设模型的截距(所有假人 = 0 的结果)为 5,这意味着平均使用 5 辆卡车。如果您的假人的效果/系数为 2,则意味着周一(平均)还有 2 辆卡车使用。因此,每个虚拟/指标(即如果它是 1)向您展示了与基本类别(所有虚拟都是 0)形成对比的效果。

这是Python中的一些脚本,我猜它指的是类似的问题,也许它有助于定位:https ://stackoverflow.com/questions/50733014/linear-regression-with-dummy-categorical-variables

这也可能有帮助:https ://songhuiming.github.io/pages/2017/01/21/linear-regression-in-python-chapter-3-regression-with-categorical-predictors/

另一个注意事项:原则上我会尝试从时间戳中获取许多不同的假人/指标,例如工作日、一天中的小时、特殊的日子或季节(圣诞节、冬季等)。您需要尝试适合您和模型的组合。但不要在模型中插入太多指标。第一步让事情变得简单,然后尝试改进模型。

为了检查模型的“质量”,您可以查看 R2(一种衡量您对 0,1 之间数据的解释能力的衡量标准)。您还可以随机(!)留出大约 10-20% 的数据(首先不要使用它们来估计模型),以检查您的模型在某个时间点解释真实卡车使用的程度。

我会使用 R 来完成这样的任务(我发现它比 Python 更直观)。这是 R 的一些示例代码:https ://stats.idre.ucla.edu/r/modules/coding-for-categorical-variables-in-regression-models/

希望这会有所帮助:祝你有趣的项目好运!

我将从一个漂亮而简单的决策树回归开始,根据日期、时间和停止服务的卡车(功能)来预测工作的卡车数量。可视化这棵树可以对正在运行的大模式提供一些不错的见解,并应用它回答诸如“我可以根据这些数据创建一个概率模型吗?例如:在 7 月份的 08:00,有 x% 的概率N 辆消防车在工作?”

查看基于时间的方法可能是有意义的,即考虑到数据的顺序性。在最简单的形式中,您只需添加一个特征“过去 N 小时内平均有多少辆卡车可用?”,这肯定会增加模型的预测能力。