数据
我有显示年,月和客户计数的数据
Yr Mth Cnt
2004 7 8966
2004 8 9564
2004 9 9324
2004 10 9895
2004 11 9689
2004 12 10358
2005 1 9955
2005 2 8840
2005 3 10076
2005 4 9827
2005 5 10710
2005 6 10356
2005 7 10689
2005 8 10772
2005 9 10003
2005 10 10655
2005 11 10360
2005 12 11093
2006 1 10874
2006 2 9616
2006 3 10908
2006 4 10524
2006 5 10602
2006 6 10273
2006 7 11247
2006 8 11072
2006 9 10285
2006 10 11236
2006 11 10702
2006 12 11138
2007 1 10695
2007 2 10040
2007 3 11254
2007 4 11372
2007 5 11630
2007 6 10890
2007 7 11221
2007 8 12411
2007 9 11129
2007 10 10620
2007 11 11078
2007 12 11553
2008 1 10614
2008 2 10235
2008 3 11216
2008 4 10690
2008 5 11214
2008 6 11042
2008 7 10722
2008 8 11216
2008 9 11234
2008 10 10907
2008 11 10628
2008 12 11382
2009 1 10789
2009 2 9908
2009 3 11387
2009 4 10805
2009 5 12096
2009 6 11937
2009 7 11358
2009 8 11490
2009 9 10836
2009 10 11899
2009 11 11565
2009 12 11874
2010 1 11030
2010 2 10488
2010 3 12017
2010 4 11412
2010 5 11990
2010 6 11216
2010 7 11728
2010 8 12131
2010 9 11603
2010 10 12105
2010 11 12152
2010 12 12360
2011 1 11940
2011 2 10739
2011 3 12153
2011 4 11665
2011 5 11886
2011 6 11720
2011 7 11625
2011 8 12257
2011 9 11582
2011 10 11661
2011 11 11437
2011 12 12146
2012 1 11375
2012 2 11228
2012 3 12164
2012 4 11801
2012 5 12058
2012 6 11929
2012 7 12107
2012 8 11728
2012 9 11816
2012 10 11918
2012 11 11835
2012 12 12500
2013 1 11733
2013 2 10916
2013 3 12262
2013 4 11658
2013 5 12357
2013 6 12000
2013 7 11911
2013 8 12353
2013 9 11772
2013 10 11671
2013 11 11546
2013 12 12228
2014 1 11886
2014 2 10985
2014 3 12777
2014 4 11613
2014 5 12358
2014 6 12227
2014 7 12032
2014 8 12800
2014 9 12299
2014 10 12693
2014 11 12520
2014 12 13243
2015 1 12459
2015 2 11998
2015 3 13234
2015 4 12492
2015 5 13081
2015 6 12968
2015 7 12572
2015 8 13475
2015 9 12301
2015 10 13167
2015 11 12885
2015 12 13498
2016 1 12807
2016 2 12904
2016 3 13689
2016 4 13318
2016 5 13813
2016 6 13083
2016 7 13309
2016 8 13688
2016 9 13231
2016 10 13570
2016 11 14195
2016 12 14798
2017 1 13762
2017 2 12839
2017 3 14542
2017 4 13631
2017 5 14640
2017 6 14371
2017 7 14350
2017 8 14725
2017 9 14362
2017 10 14605
2017 11 14174
2017 12 14243
2018 1 13636
2018 2 13099
2018 3 14313
2018 4 13632
2018 5 14284
2018 6 13676
2018 7 13708
2018 8 14018
2018 9 13716
2018 10 14283
2018 11 13902
2018 12 14753
2019 1 14075
2019 2 13369
2019 3 14774
2019 4 13919
2019 5 13715
显然随着时间的流逝
这是一个每年的数字,表明每年的数字在增加
在月度数据的同时,您可以看到2月份每年的客户数量都有下降
代码
由于数据并非100%倾斜,我认为LinearRegression不是正确的模型,因为它在未来的预测中并未显示2月份的下降
我使用了RandomTreeRegressor
这是我的代码
import pymssql
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
conn = pymssql.connect(server="SalesServer", database="Customers")
df = pd.read_sql("EXEC SP_CustomersCount", conn)
conn.close()
#a new column i have created to make data continious
df["YrMth"] = (12 * (df["Yr"] - 2000)) + df["Mth"]
x_test = pd.read_csv(r"c:\temp\MonthlyPred.csv")
#a new column i have created to make data continious
x_test["YrMth"] = (12 * (x_test["Yr"] - 2000)) + x_test["Mth"]
x= df.drop("Cnt", axis=1)
y= df["Cnt"]
x_train = x
y_train = y
rf = RandomForestRegressor(n_estimators=1000)
rf.fit(x_train, y_train)
y_pred = rf.predict(x_test)
y_pred = pd.DataFrame(y_pred)
print(x_test.assign( Pred= y_pred.iloc[:,0]))
结果
我得到了这些预测
Yr Mth YrMth Pred
0 2019 5 233 13872.707
1 2019 6 234 13867.611
2 2019 7 235 13879.211
3 2019 8 236 13970.375
4 2019 9 237 13961.416
5 2019 10 238 14121.583
6 2019 11 239 14107.296
7 2019 12 240 14430.914
8 2020 1 241 13893.945
9 2020 2 242 13529.786
10 2020 3 243 14335.714
11 2020 4 244 13933.575
12 2020 5 245 13872.707
13 2020 6 246 13867.611
14 2020 7 247 13879.211
15 2020 8 248 13970.375
16 2020 9 249 13961.416
17 2020 10 250 14121.583
18 2020 11 251 14107.296
19 2020 12 252 14430.914
20 2021 1 253 13893.945
21 2021 2 254 13529.786
22 2021 3 255 14335.714
23 2021 4 256 13933.575
24 2021 5 257 13872.707
25 2021 6 258 13867.611
26 2021 7 259 13879.211
27 2021 8 260 13970.375
28 2021 9 261 13961.416
29 2021 10 262 14121.583
30 2021 11 263 14107.296
31 2021 12 264 14430.914
32 2022 1 265 13893.945
33 2022 2 266 13529.786
34 2022 3 267 14335.714
35 2022 4 268 13933.575
36 2022 5 269 13872.707
37 2022 6 270 13867.611
38 2022 7 271 13879.211
39 2022 8 272 13970.375
40 2022 9 273 13961.416
41 2022 10 274 14121.583
42 2022 11 275 14107.296
43 2022 12 276 14430.914
44 2023 1 277 13893.945
45 2023 2 278 13529.786
46 2023 3 279 14335.714
47 2023 4 280 13933.575
48 2023 5 281 13872.707
49 2023 6 282 13867.611
50 2023 7 283 13879.211
51 2023 8 284 13970.375
52 2023 9 285 13961.416
53 2023 10 286 14121.583
54 2023 11 287 14107.296
55 2023 12 288 14430.914
这显然是不对的,因为每年在同一月份重复相同的金额(2019年5月与2020年5月相同,与2021年相同,依此类推)
理想的解决方案应该显示每年倾斜并且在2月下降
我的问题
我的理解是RandomForestRegressor使用Tree决策然后建立回归 为什么会这样?
期望
我在这里做错什么了吗? 那是正确的模型吗?
答案 0 :(得分:0)
我改变了模特 我使用了Auto-Sklearn
我得到了更好的结果
答案 1 :(得分:-1)
x_test的形式是什么?
您不能一次完成所有年份,因为nn需要上一年的数据才能准确预测
所以我认为您需要向其提供其输出的数据。
我不确定这是否正确,因为我不知道x_train和x_test是正确的。他们是日期还是其他?我尝试这样做,但是由于“由于未知原因而失败”,因此我无法访问该数据集。
我希望这会有所帮助:)