日経データ(CSV)を読み込ませて、未来予測を行います。
このようなデータを読み込ませると、時系列予測が行えるという事です。
N225.csv
1 2 3 4 |
Date Open High Low Close Adj Close Volume 2015/11/19 19851.24023 19959.06055 19761.56055 19859.81055 19859.81055 139600 2015/11/20 19800.19922 19879.81055 19715.74023 19879.81055 19879.81055 109700 2015/11/24 19875.99023 19954 19834.75977 19924.89063 19924.89063 133900 |
プログラム
QuickProphet.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import pandas as pd import matplotlib.pyplot as plt from fbprophet import Prophet data = pd.DataFrame() file_name = 'C:\\var\\www\\ecpink\\N225.csv' data = pd.read_csv(file_name, skiprows=1,header=None, names=['ds','Open','High','Low','Close','y','Volume']) inpdata = data.append(data) print(inpdata) model = Prophet(yearly_seasonality=False) model.fit(inpdata) future_data = model.make_future_dataframe(periods=150) forecast_data = model.predict(future_data) model.plot_components(forecast_data).savefig('C:\\var\\www\\ecpink\\aaa.png') model.plot(forecast_data).savefig('C:\\var\\www\\ecpink\\ccc.png') |
結果
aaa.png
ccc.png
実行中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
C:\var\www\ecpink>python QuickProphet.py ds Open High Low Close y Volume 0 2015-11-19 19851.240234 19959.060547 19761.560547 19859.810547 19859.810547 139600.0 1 2015-11-20 19800.199219 19879.810547 19715.740234 19879.810547 19879.810547 109700.0 2 2015-11-24 19875.990234 19954.000000 19834.759766 19924.890625 19924.890625 133900.0 3 2015-11-25 19856.839844 19871.750000 19786.529297 19847.580078 19847.580078 133200.0 4 2015-11-26 19929.970703 19992.439453 19926.099609 19944.410156 19944.410156 117300.0 5 2015-11-27 19994.050781 19994.050781 19831.250000 19883.939453 19883.939453 114600.0 6 2015-11-30 19857.380859 19867.949219 19707.669922 19747.470703 19747.470703 161200.0 7 2015-12-01 19799.080078 20012.400391 19797.550781 20012.400391 20012.400391 133100.0 8 2015-12-02 19957.500000 20002.119141 19926.220703 19938.130859 19938.130859 115900.0 9 2015-12-03 19894.630859 19967.880859 19862.740234 19939.900391 19939.900391 116200.0 10 2015-12-04 19616.519531 19660.900391 19444.539063 19504.480469 19504.480469 134100.0 11 2015-12-07 19710.390625 19811.509766 19677.210938 19698.150391 19698.150391 103300.0 12 2015-12-08 19689.869141 19764.210938 19475.279297 19492.599609 19492.599609 124100.0 13 2015-12-09 19391.500000 19475.400391 19260.119141 19301.070313 19301.070313 130300.0 14 2015-12-10 19070.019531 19125.060547 19025.779297 19046.550781 19046.550781 119700.0 15 2015-12-11 19020.750000 19282.210938 19020.750000 19230.480469 19230.480469 165800.0 16 2015-12-14 18887.089844 18911.779297 18611.089844 18883.419922 18883.419922 134300.0 17 2015-12-15 18869.039063 18897.869141 18562.509766 18565.900391 18565.900391 137800.0 18 2015-12-16 18868.199219 19054.890625 18859.109375 19049.910156 19049.910156 143900.0 19 2015-12-17 19364.570313 19507.169922 19325.150391 19353.560547 19353.560547 152700.0 20 2015-12-18 19320.460938 19869.080078 18982.250000 18986.800781 18986.800781 199200.0 21 2015-12-21 18845.500000 18979.830078 18651.130859 18916.019531 18916.019531 154800.0 22 2015-12-22 18927.859375 18943.460938 18824.650391 18886.699219 18886.699219 135700.0 23 2015-12-24 19071.410156 19071.410156 18780.939453 18789.689453 18789.689453 129500.0 24 2015-12-25 18823.910156 18870.699219 18744.439453 18769.060547 18769.060547 122600.0 25 2015-12-28 18838.910156 18922.900391 18764.539063 18873.349609 18873.349609 102300.0 26 2015-12-29 18843.390625 18991.009766 18783.359375 18982.230469 18982.230469 96900.0 27 2015-12-30 19070.830078 19113.179688 19017.269531 19033.710938 19033.710938 100500.0 28 2016-01-04 18818.580078 18951.119141 18394.429688 18450.980469 18450.980469 140200.0 29 2016-01-05 18398.759766 18547.380859 18327.519531 18374.000000 18374.000000 132300.0 .. ... ... ... ... ... ... ... 726 2018-10-08 NaN NaN NaN NaN NaN NaN 727 2018-10-09 23550.470703 23587.050781 23442.460938 23469.390625 23469.390625 86500.0 728 2018-10-10 23538.919922 23589.380859 23373.539063 23506.039063 23506.039063 70600.0 729 2018-10-11 23043.369141 23051.189453 22459.019531 22590.859375 22590.859375 115300.0 730 2018-10-12 22323.429688 22711.130859 22323.429688 22694.660156 22694.660156 99500.0 731 2018-10-15 22501.330078 22520.589844 22261.919922 22271.300781 22271.300781 79900.0 732 2018-10-16 22298.199219 22549.240234 22269.529297 22549.240234 22549.240234 70100.0 733 2018-10-17 22806.589844 22959.410156 22765.580078 22841.119141 22841.119141 72100.0 734 2018-10-18 22871.279297 22873.130859 22637.289063 22658.160156 22658.160156 64300.0 735 2018-10-19 22342.000000 22551.669922 22212.570313 22532.080078 22532.080078 67400.0 736 2018-10-22 22374.210938 22672.250000 22271.589844 22614.820313 22614.820313 63000.0 737 2018-10-23 22404.140625 22410.150391 21993.070313 22010.779297 22010.779297 80200.0 738 2018-10-24 22167.759766 22207.089844 21911.419922 22091.179688 22091.179688 83900.0 739 2018-10-25 21676.830078 21703.210938 21204.400391 21268.730469 21268.730469 93600.0 740 2018-10-26 21440.839844 21476.660156 20971.929688 21184.599609 21184.599609 92900.0 741 2018-10-29 21323.609375 21465.990234 21109.970703 21149.800781 21149.800781 70800.0 742 2018-10-30 21049.519531 21568.400391 21035.880859 21457.289063 21457.289063 116900.0 743 2018-10-31 21569.560547 21920.460938 21530.390625 21920.460938 21920.460938 105000.0 744 2018-11-01 21906.410156 21906.410156 21628.449219 21687.650391 21687.650391 101900.0 745 2018-11-02 21761.580078 22308.419922 21751.330078 22243.660156 22243.660156 101900.0 746 2018-11-05 22002.470703 22051.650391 21865.980469 21898.990234 21898.990234 78700.0 747 2018-11-06 22018.869141 22160.830078 21994.279297 22147.750000 22147.750000 0.0 748 2018-11-07 22189.740234 22444.650391 21996.939453 22085.800781 22085.800781 96300.0 749 2018-11-08 22446.009766 22583.429688 22421.000000 22486.919922 22486.919922 81900.0 750 2018-11-09 22471.310547 22494.580078 22226.009766 22250.250000 22250.250000 78100.0 751 2018-11-12 22121.699219 22324.009766 22046.289063 22269.880859 22269.880859 59300.0 752 2018-11-13 21885.240234 21892.289063 21484.650391 21810.519531 21810.519531 85700.0 753 2018-11-14 21851.130859 21990.410156 21764.880859 21846.480469 21846.480469 75200.0 754 2018-11-15 21670.349609 21818.730469 21613.529297 21803.619141 21803.619141 0.0 755 2018-11-16 21804.900391 21873.740234 21663.990234 21680.339844 21680.339844 74900.0 [1512 rows x 7 columns] INFO:fbprophet.forecaster:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this. Initial log joint probability = -8.22432 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 99 4532.75 0.0245248 2165.69 1 1 131 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 199 4640.88 0.0138072 1483.25 1 1 241 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 299 4727.35 0.0090262 1168.4 0.8413 0.8413 354 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 399 4754.29 0.00437651 667.962 2.691 0.2691 473 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 499 4782.81 0.00418885 596.92 1 1 587 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 599 4791.46 0.0101753 330.561 1 1 707 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 699 4799.16 0.0302157 948.306 1 1 817 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 750 4802.87 4.36742e-005 138.111 8.639e-008 0.001 923 LS failed, Hessian reset 799 4804.89 0.00583375 465.778 1 1 985 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 899 4807.83 0.000803547 151.705 1 1 1102 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 963 4809 1.89099e-005 111.113 1.616e-007 0.001 1220 LS failed, Hessian reset 999 4809.28 0.000318721 209.582 3.754 0.3754 1269 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 1099 4809.98 0.00908107 336.734 0.3764 0.3764 1380 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 1153 4811.08 5.21538e-005 252.49 9.835e-008 0.001 1483 LS failed, Hessian reset 1199 4812.57 0.000208161 153.138 0.4965 0.4965 1537 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 1247 4813.03 2.10027e-005 117.595 2.072e-007 0.001 1645 LS failed, Hessian reset 1299 4813.11 0.00128466 119.617 1 1 1707 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 1315 4813.19 1.37295e-005 75.5237 1.045e-007 0.001 1798 LS failed, Hessian reset 1399 4813.3 7.96822e-005 120.817 0.5633 0.5633 1915 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 1499 4813.57 0.00126427 123.043 0.2233 1 2035 Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes 1585 4813.67 8.54248e-006 68.9966 1.71e-007 0.001 2189 LS failed, Hessian reset 1591 4813.67 1.16266e-006 34.0208 3.257e-008 0.001 2242 LS failed, Hessian reset 1598 4813.67 2.1716e-007 47.4276 0.2896 1 2254 Optimization terminated normally: Convergence detected: relative gradient magnitude is below tolerance C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:2349: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working if isinstance(obj, collections.Iterator): C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:2366: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working return list(data) if isinstance(data, collections.MappingView) else data |
入力データが変わっても、プログラムの修正点が少なく時系列予測が行えそうです。
このサイトにプログラムとデータが公開されておりましたので、動かしてみました。
このサイトでは14日先までの予測結果が出てましたが、140日先までとするとこんな出力となります。
元データから小幅に上下しながら上がり続けるのではないかと予想しましたが、時系列予測的にはこうなんですね。合っているのか分かりませんが、、、このような時系列がある場合にアシスト的に使えるのかな!?っと思ったりしました。