本作業所使用的 time series 模型為 LSTM ,並以前七天的資料來當作每次預測的依據,去預測接下來後七天的資料。最終目標是預測 20210323 到 20210329 為期七天的備轉容量數值。評估模型的表現是以 RMSE 為標準,而本模型的RMSE表現結果約為 126.46 。後面也會視覺化Validation的情況,我們可以根據線段的重疊度來大概判斷模型的準確率。
- Python 3.8.3
- Ubuntu 20.04.2 LTS
requirements.txt目前還是手刻,若有python版本和lib版本相衝或不相容,還請自行解決。
- pandas == 1.2.3
- keras == 2.4.3
- matplotlib == 3.2.2
- numpy == 1.19.5
- sklearn == 0.24.1
- pydot == 1.4.2
- graphviz == 0.16
Install requirement.txt
pip3 install -r requirements.txt
執行 app.py。 Input 和 Output path 已經定義在app.py里了.
python3 app.py
強烈建議直接執行ipynb檔案來直接看我們在各個區塊的輸出結果。
Input的data為政府資料開放平臺上的台灣電力公司_過去電力供需資訊.csv。在這份資料中有共有397個 entries 和 71 個 features。而本模型只使用的features為 備轉容量 (MW) 與 備轉容量率(%) 。且 traning data 與 validation data 以比例為9:1做切割。
為了加快模型收斂找到最佳參數組合,這裡使用MinMaxScaler把資料重新scaling成 -1 至 1 之間。
epochs設定為50,最後loss約位於0.04左右:
以此模型進行2021/03/23~2021/03/29的備載容量預測結果。
-
Features 數目 其實features數目不是越多越好,在這一份資料當中就含有各種各樣的features,但是有滿多都是缺值,也就是0的情況,所以蠻多都不能拿來用。我原本之前有用了前面幾個features(如: 尖峰負載,凈尖峰供電能力,水力,風力,太陽能發電等大眾特徵),用出來的RMSE都相當高,約有400多左右,但是自從我只給模型備轉容量和備轉容量率,失誤就降下來了。
-
典型的Time Series 模型表現不好 一開始我不是就用LSTM的,我嘗試過了Naive Method, Prophet, Exponential Smoothing, SARIMA, Holt-Winter。而比較好的只有Exponential和Holt Winter 但似乎效果也沒有讓我很滿意,RMSE只有400~600之間,完全下不去。所以我個人認為還是要可以手動調整的LSTM模型的適應性會比較好,得到的結果也比較令人滿意。
-
Split Data的比例分配 偷偷將一個小秘密,如果你把train和valid的分配比例調到train越多,效果會有奇效(當然,這裡資料量少,training data越多,模型學的越好),但是如果一般用8:2 RMSE會是400多,但是9:1 RMSE會直接掉到100多。因為平均失誤的越少,數值越低。
-
Time Series 轉換成 Samples 時的定義 我這裡是使用前七天為依據,後七天為結果,但是也可以設定成前七天配第八天為label的組合,或者前十四天,三十天為依據等等。或者n:n+7為train_data,n+1:n+8為label 也可以,用不同方式會有不同結果。下次可以嘗試看看。
- Time Series
- Forecasting
- LSTM
- RNN
- Multivariables
- SARIMA Model
- Holt-Winter Model
- Dropbox Homework Description
- https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/
- https://towardsdatascience.com/lstm-time-series-forecasting-predicting-stock-prices-using-an-lstm-model-6223e9644a2f
- https://medium.datadriveninvestor.com/multivariate-time-series-using-rnn-with-keras-7f78f4488679







