2013年12月9日月曜日

(自分用メモ)R 時系列分析の関数まとめ

Rには時系列分析用のパッケージがいろいろありますが、授業で使っているパッケージ・関数を備忘のために、まとめておきたいと思います。

まずデータを入手したら

  1. 時系列プロット
  2. 単位根検定(Augmented Dickey–Fuller Test, Phillips-Perron Test for Unit Roots)
    • adf.test(data, alternative ="stationary") (tseries package)
    • PP.test(data)
データが非定常だったら・・・
  1. 移動平均でdetrend
  2. 単位根検定でひっかかったら、diffを取る(ex: Z_t = Y_t - Y_t-1)
  3. Exponential smoothingでdetrend
    • Simple Exponential Smoothing
      • HoltWinters(data,alpha=数字, beta=FALSE, gamma=FALSE) #ARIMA(0,1,1)と同じこと
    • Double Exponential Smoothing
      • HoltWInters(data,alpha=数字, beta=数字, gamma=FALSE) #ARIMA(0,2,2)と同じこと
    • 以下2つを使う場合、dataはtsオブジェクトでfrequencyが定義されてるもの
    • Seasonal Exponential Smoothing without Trend
      • HoltWinters(data,alpha=数字, beta=FALSE, gamma=数字) 
    • Seasonal Exponential Smoothing with trend
      • HoltWinters(data, alpha=数字, beta=数字, gamma=数字)  


データは定常。ではWhite noiseか?
  1. 時系列データがWhite noiseかどうかの検定 (Box Pierce , Box Ljung test)
    • Box.test(data, lag=1 , type = c("Box-Pierce", "Ljung-Box")

White noiseではないようだ。では、ARIMAモデルか?
  1. Sample Auto Correlation, Sample Partial Auto Correlationのプロット
    • acf(data, plot=TRUE)
    • pacf(data,plot=TRUE)
  2. ARMAのパラメータ候補を絞りたい
    • eacf(data) (TSA package)
  3. ARIMA(p,d,q) モデルの推定(dataはtsオブジェクトです)
    • arima(data, order=c(p,d,q),method="ML")
  4. ARIMA(p,d,q) モデルの推定(dataはtsオブジェクトです)
      • arima(data,order=c(p,d,q),seasonal=list(order=c(P,D,Q),period=S),method="ML")

    ARIMAモデルの残差はWhite noiseになったのか?
    1. 残差プロット + Box testでチェック
    2. 残差プロットの中でvolatility clusteringがあれば、ARCH LM testをやってみる

    ARCH/GARCHモデル
    1. garchFit(~arma(p,q)+garch(q,p),data=data) (GARCHのパラメータqはalpha, pのパラメータはbeta)

    予測
    1. arimaで推定したモデルであれば、forecast(arimaクラスのオブジェクト) (forecast library)
    2. garchFitで推定したモデルであれば、predict(fGarchクラスのオブジェクト)

      2013年11月1日金曜日

      第2モジュールスタート!

      さて、先々週から第2モジュールが始まりました!

      第2モジュールは、以下のラインナップです。

      Time Series Analysis for Business and Finance
      前モジュールでやった回帰分析の授業の続きという位置づけですが、まずARプロセス、MAプロセス、ARMA, ARIMA, SARIMAといった時系列のモデルを勉強します。今後、ARCH、GARCHなんかもやるみたいです。今のところ、主には理論をやっていますが、今後はRとSASを使って分析をやっていくようです。

      Machine Learning
      一番思ってたのと違うのが、この授業・・・・。かなり理論寄りです。マシンラーニングは、Rとかで動かすっていうだけだと結構楽しい代物ですが、それなりに数学もやると、そこそこヘビーです。しかも、実際に動かすのは、PythonのScikit-learnです。私はR使いなので、Rでやるほうが楽だったのですが、仕方ない・・・。

      Distributed Databases
      こちらは、SQLから、NoSQLへの発展編です。最初2回は、MySQLのおさらいと少し応用編をやり、次回からはMongoDBを使おうという流れです。MySQLは前期のData Acquisitionの復習に始まり、変数の使い方、Stored procedure, stored functionといった内容をやりました。先生が愉快な方なので、楽しいです。

      Practicum 1 
      強制的に企業とのコラボプロジェクトにアサインされます。会社の希望は出せますが、人を選ぶのは会社側らしく(事前にレジュメを提出します)、必ずしも希望の会社にアサインされるかはわかりません。会社によっては面接したりします。だいたい1週間に2回くらい出社するように言われているクラスメートが多いようです。詳細は書けないのですが、コラボ先企業は、シリコンバレーのベンチャーはもちろん、金融、小売、交通、自治体など多岐に渡ります。

      2013年10月7日月曜日

      Kaggle Hackathon!! ハッカソン!

      先日、サンフランシスコのマイクロソフトで行われたKaggle Hackathonに、クラスメートと参戦してきました。

      結果は8位。上出来です!

      Kaggle Hackathonとは、24時間レースで、機械学習の精度を競い合うコンペです。

      今回のテーマは、あるソーシャルネットワークのサイトのView数、コメント数、投票数を予測するというもので、そのサイトは、ある地域住民が地域の不満や改善してほしい点を投稿し、他のユーザーが、コメントしたり投票したりします。

      そして、投票数が多いものに関しては解決が図られるというものです。たとえば、「道に落書きがあり、汚いから、なんとかして!」みたいな投稿に対して、投票されます。

      うちのチームは人数あ多かったので、24時間の間でもいろいろな手が打てたのも好成績の要因だったと思います。私は、投稿のタイトルをテキストマイニングして、新たなダミー変数を作るということをしてました。表記ゆれ、スペルミスを正規表現で修正していくような感じですね。

      残念ながら、作った変数はあまり予測力向上に役立ちませんでした。



      オンサイトのコンペで良いのは、優勝者と話ができることです。優勝した方と話したら、テキストデータは最初に分析しないと決めていたといってました。データをざっと見て、あまり相関してなさそうだと見たということです。

      さすが、洞察がするどい!自分は、そういう感覚がまだあまり備わっていないなぁと感じてしましました。データをざっと眺めて、最初にplay aroundしたときに、予測する変数と説明変数の間にどんな関係がありそうかを見出すというのが肝心だということです。

      できることが増えると、やってみたい分析をやってしまうという陥りやすい罠にはまってしまうということを学習しました。

      他のKaggleコンペにも参戦しているので、今回の教訓を活かします!でも、チームで8位とれたので、よしとしましょう!