学習中のデータ分析についての備忘録です。短回帰モデルと重回帰モデル、これらを行う上で使うPythonのパッケージや関数等。
データ分析をする前に
予測モデルを作成する前に、必ず使用するデータの概要を確認しておくことが大切。大切そうなことは例えば、各データが何を示しているのか、とかデータに欠損値がないかとか。
素晴らしい結果と過学習
予測にはテストデータを使った学習と、実際に未知の結果を予測するという手順があるが、テストデータに対して良い結果を出すように過剰に最適化してしまうと、実際の予測で役に立たなかったということになりかねません。
データ解析の本ではないけれど、”世界一簡単なアルゴリズムトレードの構築方法”にはこんなことが書かれていました。
「オーバーフィッティング(過剰最適化)」は必ず知っておくべき重要な概念である。オーバーフィッティングとは、戦略が素晴らしくうまくいくように、ルールや特別なパラメーターを使って戦略を微調整することを言う。これはヒストリカルデータではうまくいく。(中略)ルールを過去のイベントにフィットするようにこねくり回せば、過去のイベントはとらえることができるだろう。しかし、将来的にもうまくいくためには、新しいイベントは過去に現れたのと同じ条件で現れなければならない。これはあり得ないことである。
Perry J.Kaufman (2016), A Guide to Creating A Successful Algorithmic Trading Strategy, 山下恵美子訳,2017,p28
大切なのは既に起きたことを上手く予測することではなく、これから起こることを予測すること。
目的変数と説明変数
予測において
- 予測したいもの⇒目的変数
- 予測の手がかりとするもの⇒説明変数(機械学習の文やでは特徴量という)
と言います。例えば、奥さんの機嫌を知りたいなら、奥さんの機嫌が「目的変数」で、説明変数には「季節」や「給料」、「帰宅時間」、「1日当たりの接触時間」といったものがあるのかもしれません。例えば、帰宅時間が早いほど奥さんの機嫌が悪くなるのであれば、帰宅時間を「説明変数」にして奥さんの機嫌が悪くさせないには何時に帰れば良いか分かるのかもしれません。
この「説明変数」は一つだけではなくて、複数使うこともできるようです。
単回帰モデルでは「1つの目的変数を1つの説明変数によって予測」します。
重回帰モデルでは「1つの目的変数を複数の説明変数によって予測」します。
先ほどの過学習の部分でも書いた通り、過去のデータに過剰にフィットさせると、実際には役に立たなかった、ということになりかねないため、適切な説明変数を使うことが予測では大切だそうです。
単回帰モデルについての理解
単回帰モデルでは、最小二乗法というものによって求められる回帰直線を使って予測を行います。
最小二乗法によって求められる回帰直線は2つの値によって表される散布図を近似する直線を表します。2つの値に相関関係がみられる場合、散布図にプロットされる点の集まりは直線っぽくなります。ですから、単回帰モデルは説明変数と目的変数にある程度の相関がある場合に使えそうです。相関がないようなら短回帰モデルを使ってもまともな結果は求められなさそうです。
クロス集計
単純な集計では、例えばA,B,Cという項目について、Aがこれくらい、Bがこれくらい、Cはこれくらいというように数え上げる。クロス集計では、例えば30代の人についてAはこれくらい、Bはこれくらい、Cはこれくらい、40代の人については…といった感じで集計する。年代別とか国別といった集計がこれにあたる。
単回帰分析をするときに説明変数をreshapeする理由
あるデータtrainがあって、そのうちのdayというカラム(列)を説明変数、yというカラム(列)を目的変数に選択して短回帰モデルを作成するとき
1 | LinearRegression.fit(day.values,y) |
とすると
1 | ValueError: Expected 2D array, got 1D array instead: |
というエラーを吐かれます。で、僕しばらくこの2D(2次元)を2列の配列だと勘違いしていていました。
元のデータ”day.values”は[1,2,3,…]と定義されていて1次元配列です。
要求されているのは二次元配列なので、reshape()を使うことで実現できます。
day.values.reshape(-1,1)とすると作成される配列は[[1,2,3,…]]となります。
[[1,2,3,…]]も実際のところは元のデータ”day.values”と同じようにn行1列のデータに変わりないとは思いますが、fit()に渡す説明変数が1つの場合はreshape(-1,1)としてn行1列の2次元配列にしなければならないようでした。
今回のデータ分析の勉強は、Udemyのこのコースを受講しながら取組みました。僕が受講した段階では詳細な説明はありませんでしたが、おかげで予測の大まかな流れを把握できました。