予測モデル構築①
需要予測的なアルゴを数式をいじりつつ少しずつ作ります。
色々な数学を触りつつ脱線しつつ最後は論文になるような物を目指します。
Taylor展開でサインカーブ推定
Teylor展開は以下の式で表されます。
f\left(x\right)=\sum_{n=0}\frac{f^{\left(n\right)}\left(a\right)}{n!}\left(x-a\right)^{n}
上式に$x=a+1$を仮定します。すると、以下の様に成ります。
f\left(a+1\right)=\sum_{n=0}^{\infty}\frac{f^{\left(n\right)}\left(a\right)}{n!}\left(a+1-a\right)^{n}\\=f\left(a\right)+\sum_{n=1}^{\infty}\frac{f^{\left(n\right)}\left(a\right)}{n!}
これである関数$f$に$a$を与えると$a+1$の$f$を得る式になりました。
つまり前の時刻の値が得られると、次の時刻の値を予測するようなものです。
試しにサインカーブを与えます。以下の式に成ります。
\sin\left(a+1\right)=\sin\left(a\right)+\cos\left(a\right)-\frac{\sin\left(a\right)}{2!}-\frac{\cos\left(a\right)}{3!}+\frac{\sin\left(a\right)}{4!}+\cdots
pythonでプロットしてみます。
from numpy import *
from pylab import *
%matplotlib inline
x = arange(100) / 10 * pi
y = sin(x) # 現在
n = 1
z =0 # 予測
for i in range(10):
if ((i + 2) // 2) % 2:
op = 1
else:
op = -1
n *= i if i else 1
if i % 2:
z += op * cos(x) / n
else:
z += op * sin(x) / n
plot(x, y,"r",label="now");plot(x,z,"b", label="pred");legend();show()
現在(赤:now)の時点で未来(青:pred)を
予測しているので、赤より青が少し左にずれた感じになっています。
この位相のズレは1なはずなので、1だけ青をずらしてみます。
x2 = arange(100) / 10 * pi + 1 #位相を1ずらす
plot(x, y,"r",label="now");plot(x2,z,"b", label="pred");legend();show()
ぴったり重なりました。予測ができています。
関数形さえ定義できていれば任意の精度(ただし、連続で微分可能なのもに限る)で
予測ができそうです。でも金融データも購買データも事前に関数系が得られていないので
(得られていたらうれしい)、
何らかの予測モデル(数式)を作る必要があります。
Author And Source
この問題について(予測モデル構築①), 我々は、より多くの情報をここで見つけました https://qiita.com/uyuutosa/items/061fb41a10125d15cefb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .