Моя прогнозирующая модель RandomForestRegressor становится повторяющейся - PullRequest
0 голосов
/ 30 мая 2019

Данные

У меня есть эти данные, которые показывают год, месяц и количество клиентов

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

, которое явно имеет наклон надвремя

Это годовая цифра, которая показывает увеличение числа каждый год

enter image description here

одновременно в месячной цифре, которую выМожно видеть, что в феврале число клиентов уменьшается с каждым годом

enter image description here

Код

Поскольку данные не склонны на 100%, я думал, что LinearRegression не является подходящей моделью, поскольку она не показывает падение в феврале в будущих прогнозах

Я использовал 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, то же самое, что май 2020, то же самое, что 2021, и т. д.)

идеальное решение должно показывать наклон в год и падение Feb

Мой вопрос

Насколько я понимаю, RandomForestRegressor использует древовидное решение, а затем строит регрессию Почему это происходит?

Ожидание

Я что-то здесь не так делаю?Это правильная модель?

1 Ответ

0 голосов
/ 30 мая 2019

в какой форме дается x_test?

вы не можете делать все годы сразу, потому что nn нужны данные предыдущего года, чтобы точно предсказать

, поэтому яЯ думаю, что вам нужно передать данные, которые он выводит.

Я не уверен, что это правильно, потому что я не знаю, x_train и x_test.Это даты или что-то еще?Я пытался сделать это, но не смог получить доступ к набору данных, так как он «не удался по неизвестной причине»

Надеюсь, это поможет:)

...