【データ分析】機械学習アルゴリズムを用いた予測分析(1):移動平均(2021-01-14)

時系列予測における機械学習手法(1):移動平均(移動平均)

1.背景紹介

可能であれば、誰もが預言者になり、将来何が起こるかを予測したいと思っています。実際、この種の予測は非常に困難です。市場の方向性を事前に知っている人を想像してみてください。そうすれば、彼は億万長者になります。しかし、人々は常にこの方向に懸命に取り組んでおり、特に今日の科学技術の急速な発展において、未来を予測することはもはや無駄でナンセンスではありません。機械学習アルゴリズムは、予測のための新しいアイデアを提供してくれます。時系列に基づく予測とモデリングは、データマイニングと分析において重要な役割を果たします。

時系列モデルに基づく機械学習アルゴリズムを使用して、株式、スーパーマーケットの販売、チケット予約の開発傾向を予測したいと考えています。予測はブラインドではありませんが、特定の履歴データに基づいています。たとえば、あるスーパーマーケットの次の販売状況を予測して、購入のガイダンスを改善し、毎日十分な商品の販売を確保する必要があります。または、特定の株式の成長を予測してその利益を最大化し、その損失を最小化するには、それらの履歴データを分析する必要があります。

この記事と次の5つの記事では、データ予測分析に6つの方法を使用します。上記の6つの機械学習または深層学習アルゴリズムについては、今後の記事で詳しく紹介します。これらの記事の主な目的は、これらの方法を時系列予測に適用する方法を紹介することです。時系列予測は、実際の問題の解決に偏っています。

2.データセット

記事のデータセットとコードは私のGitHubに配置されており、それを必要とする友人は自分でダウンロードできます:https://github.com/Beracle/02-Stock-Price-Prediction.git

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#setting figure size
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 20,10

#for normalizing data
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))

データをインポートします。

df = pd.read_csv('NSE-TATAGLOBAL11.csv')
df.head()

ここに画像の説明を挿入
データセットには、日付、始値、最高価格、最低価格、最終取引、終値、総取引量、売上高など、複数の変数があることがわかります。

  • 始値と終値は、特定の日の株式の開始価格と最終価格を表します。
  • High、Low、Lastは、その日の株価の最高値、最低値、最後の価格を表します。
  • 総取引量(総取引量)は、その日に購入または売却された株式の数であり、売上高は、その日の会社の売上高です。

週末と祝日は休業となりますのでご注意ください。上記の表では、2018-10-02(国民の祝日)、2018-10-06(週末)、2018-10-07(週末)など、一部の日付値が欠落しています。

損益計算は通常、その日の株価の終値によって決定されるため、終値をターゲット変数として扱います。

日付をインデックスとして使用します。(このステップは時系列予測技術の鍵です)

#setting index as date
df['Date'] = pd.to_datetime(df.Date, format = '%Y-%m-%d')
df.index = df['Date']

元のデータの時系列トレンドグラフを見てください。

plt.figure(figsize=(16,8))
plt.plot(df['Close'], label='Close Price history')

ここに画像の説明を挿入

3.移動平均

「平均」は私たちの日常生活で最も一般的なものの1つです。たとえば、平均スコアを計算して全体的なパフォーマンスを判断したり、過去数日間の平均気温を見つけて現在の気温を把握したりします。

移動平均(移動平均)は、現在のトレンドの方向を測定するために使用されます。移動平均は、一般的な意味での平均の概念と一致しており、どちらも過去のデータの平均を計算することによって得られる数学的な結果です。移動平均は、金融分野の予測によく使用されます。計算された平均結果はアイコンとして描画されるため、すべての金融市場に固有の日々の価格変動に焦点を当てるのではなく、スムーズなデータを観察できます。移動平均は、中長期的な低周波の傾向を反映して高周波ノイズをフィルタリングし、投資家が投資判断を下すのに役立ちます。単純な平均を使用する代わりに、「移動」平均は、各予測の最新の値のセットを使用する移動平均手法を使用します。言い換えると、後続の各ステップで、セットから最も古い観測値を削除しながら、予測値が考慮されます。データセットは常に「移動」しています。
ここに画像の説明を挿入
この計算方法により、現在の情報のみが考慮されます。実際、移動平均アルゴリズムはある程度のラグを示します。ヒステリシスを犠牲にして滑らかさをトレードオフし、移動平均は滑らかさとヒステリシスの間のトレードオフでなければなりません。

元のデータセットを破壊しないために、DataFrameを再定義します。

#creating dataframe with date and the target variable
data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
     new_data['Date'][i] = data['Date'][i]
     new_data['Close'][i] = data['Close'][i]

new_data

ここに画像の説明を挿入
データを「トレーニングセット」と「テストセット」に分割します。

# splitting into train and validation
train = new_data[:987]
valid = new_data[987:]

print('Shape of training set:')
print(train.shape)
print('Shape of validation set:')
print(valid.shape)

ここに画像の説明を挿入
移動平均法。移動ウィンドウは248に設定されているため、最初の予測データを取得する場合は、元のデータセットの739番目の数値から開始し、合計と平均を開始する必要があります。

# making predictions 
preds = [] #移动平均求出的预测集
for i in range(0,valid.shape[0]):
    a = train['Close'][len(train)-248+i:].sum() + sum(preds) #从739开始往后做移动平均
    b = a/248 #移动窗口设置为248
    preds.append(b)

二乗平均平方根誤差(RMSE)を通して効果を見てください。
ここに画像の説明を挿入

# checking the results (RMSE value) 
# 比如RMSE=10,可以认为回归效果相比真实值平均相差10
rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-preds),2)))
print('RMSE value on validation set:')
print(rms)

ここに画像の説明を挿入
グラフを通して直感的に予測効果を見てください。

valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])

ここに画像の説明を挿入
この記事で選択したデータに対する移動平均アルゴリズムの予測効果は良くないことがわかります。

おすすめ

転載: blog.csdn.net/be_racle/article/details/112600268