2014年1月7日火曜日

Intersession SAS Programming スタート!

さて本日よりIntersession programのSAS Programming のコースが始まりました。このコースは、2週間後のSAS Base programmerの試験の合格を目指します(落ちると何度も受けなおさせられます・・・)。Rに慣れているので、SASは最初わかりにくかったですが、慣れるとふつう(失礼!)ですね。おそらく、R使いの方で、はじめてSASを扱う方は同じような印象を持つのではないでしょうか。

一番とっつきにくいのは、データの操作だと思いますが、その辺はSASのオンラインチュートリアルはわかりやすいと思います。
http://web.utk.edu/sas/OnlineTutor/1.2/en/60476/paths.htm

2014年1月5日日曜日

第2モジュールの振り返り

新年の初投稿です。あけましておめでとうございます。冬休みは一時帰国していましたが、元旦にサンフランシスコに戻ってきました。新年早々、第2モジュールの成績が明らかになってきています。ここらでいちど、第2モジュールの振り返りをしておきたいと思います。


Time Series Analysis for Business and Finance
以前にも書きましたが、第1モジュールでやった回帰分析の続きという位置づけです。自己回帰プロセス(AR process)、移動平均プロセス(MA process)に始まり、GARCHまでがカバー範囲です。授業が数学ヘビーでやりつつも、結構わかりやすく、ここまでのベストレクチャーでした。ただ、あくまで単変量のモデルでやるので、時系列分析入門といったところでしょうか。多変量のモデルも実務では必要となるときがあるでしょうから、そこは自習する必要があります。使用したソフトウェアは、RとSASです。

Machine Learning
カバーした機械学習のアルゴリズムは、
1. 決定木
2. ナイーブベイズ
3. KNN
4. サポートベクターマシーン
5. クラスター分析
6. アンサンブル学習(Random Forest, Bagging, Boosting)
7. アソシエーションルール
8. ニューラルネットワーク
とです。最後まで理論よりでした。アルゴリズムの中で何が起きているのかを理解することが主眼に置かれていたように思います。しかし、今思えば、そういう勉強の仕方は時間がないとできないので、良かったかもと思っています。また、ゲストスピーカーで、Jeremy Howord(KaggleのPresident兼チーフサイエンティストで数々のコンペで優勝)が彼の普段やるデータ分析のやり方などを聞く機会があったのはありがたかったです(この授業だけでなく、以前も来ています)。

Distributed Databases
MySQLのおさらいから、MongoDBでMapReduceの概念を勉強し、最後はAWSでHadoopの使い方、Hiveの使い方を学ぶというものでした。週1の授業でしたので、ざーっと流した感じです。しかし、私はWIndowsになんとかHadoop + Hiveをインストールしようとして一番時間かかったかも。。。

Practicum 1 
会社でインターンをするというもので、週2回出社、週20時間以上の時間と先生からは言われていましたが、もっと時間を使っていたような気がします。なにせデータの量も半端じゃないので処理するのに時間かかります。インターンで感じることは、データ分析で一番大事なことはやっぱり分析結果を使ってもらうことだということです。なので、データ利用者にどうやってわかりやすく説明するか、「お客さんはこんな感じではなからろうか?」とストーリーで話すことの重要性を改めて感じました。また、Take Awayをクリアにしてあげることも重要です。「棒グラフや表などでさえも読みたくない」というのがデータ利用者の本音なのだと感じます。まぁ、私にとっては、実際にアメリカで働いてみたかったので、この授業はありがたいです。

とこんな感じで第2モジュールは終わりました。結構勉強したなぁと思います。そして、週明けからはSAS集中講義があり、2週間後にSAS Base Programmerの試験を受けることになっています。これに受からないと受かるまでやらされる模様なので、一発で合格したいです。

残りは半年!後半戦もがんばらないと!

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クラスのオブジェクト)