独立R和R - SQL给出不同的结果

时间:2017-07-26 09:30:28

标签: sql-server r sql-server-2016

我正在研究我打算在SQL server 2016(数据库内)中使用的月度数据的预测模型。

我创建了一个简单的TBATS模型进行测试:

dataset <- msts(data = dataset[,3],
            start = c(as.numeric(dataset[1,1]),
                      as.numeric(dataset[1,2])), 
            seasonal.periods = c(1,12))

dataset <- tsclean(dataset,
       replace.missing = TRUE,
       lambda = BoxCox.lambda(dataset, 
                              method = "loglik", 
                              lower = -2, 
                              upper = 1))

dataset <- tbats(dataset,
                 use.arma.errors = TRUE,
                 use.parallel = TRUE,
                 num.cores = NULL
                 )

dataset <- forecast(dataset, 
                    level =c (80,95),
                    h = 24)

dataset <- as.data.frame(dataset)

数据集是从我使用SQL查询创建的.csv文件导入的。

后来,我在SQL server中使用了相同的代码,输入与我用于.csv文件的查询相同(意味着数据完全相同)

然而,当我执行脚本时,我注意到我得到了不同的结果。所有数字看起来都很好并且非常有意义,SQL和独立R都给出了预测表,但两个表之间的所有数字都有几个百分点(平均约为3%)。

对此有解释吗?我真的很困扰我,因为我需要最好的结果。

编辑:这是我的数据看起来更容易理解的方式。它基本上是3列表:年,月,交易价值(数字​​随机化,因为数据被分类)。总而言之,我有9年的数据。

2008    11  1093747561919.38
2008    12  816860005030.31
2009    1   341394536377.06
2009    2   669993867646.25
2009    3   717585597605.75
2009    4   627553319006.03
2009    5   984146176491.78
2009    6   605488762214.33
2009    7   355366795222.40
2009    8   549252969698.07
2009    9   598237364101.23

这是结果的一个例子。前两行来自SQL服务器,后两行来自RStudio。

t    Point            Lo80            Hi80
1    872379.7412      557105.271      1187654.211
2    1093817.266      778527.1078     1409107.424

1    806050.6884      517606.464      1094494.913
2    1031845.483      743387.015      1320303.95

编辑2:我仔细检查了每个部分的代码,并且我发现结果的差异发生在TBATS模型中。

SQL服务器返回: TBATS(0.684,{0,0}, - ,{&lt; 12,5&gt;})

RStudio返回: TBATS(0.463,{0,0}, - ,{&lt; 12,5&gt;})

这解释了预测值的差异,但问题仍然存在,因为它们应该是相同的。

1 个答案:

答案 0 :(得分:0)

对于将来遇到问题的人,我会回答这个问题:

似乎R引擎中的执行存在差异,具体取决于您的操作系统和运行时。我通过在我的PC和服务器上运行独立R来测试这个,使用RStudio和Microsoft R Open并在我的PC和服务器上运行数据库中的R.我还测试了所有不同的运行时间。

如果有人想测试它们,可以在工具 - 全局选项 - 常规 - R版本(对于RStudio)中更改R运行时

所有测试都返回了略有不同的结果。这并不意味着结果是错误的(至少在我的情况下,因为我预测实际业务数据和结果的间隔很宽)。

这可能不是一个实际的解决方案,但我希望我可以像我一样阻止某人恐慌一周。