Pythonを使ったデータ分析の学習 - その8(予測モデルの作成)
巷で評判の良いPythonオンライン教材、『【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門 | Udemy』を購入し、学習してみた。
前回エントリ(『予測する』とは?)はこちらから。
セクション5: CASE1:お弁当大作戦~お弁当の売り上げを予測してみよう~
ここではお弁当の売上データを使い、モデルを作成する。
また、作成したモデルを使って予測したデータをDeep Analyticsへ投稿する。
モデリングの手順
1・説明変数を決め、データを準備
どのデータを使ってモデルを作るか?を決める
今回で言うとお弁当データを学習データ(Train)と評価データ(Test)の2つにわけてモデルを作成する
2・モデルの準備
どの手法を使ってモデルを作るか?を決める
今回は単回帰モデルを作る
3・モデルの作成
学習データから取り出した説明変数と目的変数のデータを使い、モデルを作成する
4・モデルを使い予測
評価データから取り出した説明変数のデータを使い、3で作ったモデルを当てはめることで予測値を出す
5・モデルの評価
評価データに対するモデルの予測結果と実際の値を比較することで、作成したモデルの評価をする
単回帰モデルとは
単回帰モデルとは、1つの目的変数を1つの説明変数のみでモデル化する方法であり、
y = ax + b の式で表せられる。
ここでいう a は傾きであり、直線の場合は右肩上がりなら正の傾き、右肩下がりなら負の傾きである。また、 b は切片であり、直線とX=0がぶつかるところである。
例えばこのグラフの場合、傾きは-0.5であり、切片は105となる。
モデルを作成する
早速描いていく。
# まずは必要なもののインポート # sklearn.linear : サーキットラン,回帰モデルを作るのに便利なライブラリ # LinearRegression : 線形回帰という意味 import pandas as pd import numpy as np from matplotlib import pyplot as plt %matplotlib inline from sklearn.linear_model import LinearRegression as LR # 次は必要なファイルの読み込み # sampleを読み込む時はheader=Noneオプションを忘れないように注意 train = pd.read_csv("train.csv") test = pd.read_csv("test.csv") sample = pd.read_csv("sample.csv",header=None) train.head()
ここまで入力して以下のように先頭行が表示されればOK。
引き続きモデルを作成していく。
# trainから説明変数と目的変数となるデータを取り出す # 説明変数はtrainからtemperatureを選択し、変数名をtrainXとして代入する # 目的変数はtrainからyを選択し、変数名をyとして代入する trainX = train["temperature"] y = train["y"] # testから説明変数となるデータを取り出す # 説明変数はtrainと同じtemperatureを選択し、変数名をtestXとして代入する testX = test["temperature"] # 単回帰の場合のみ、説明変数に対しておまじないが必要となる # 単回帰の場合はややこしいが、train,testの説明変数ともに、データの形を整える必要がある # 具体的にはvalues.reshape(-1,1)というおまじないをする # 整えた後、再び変数Xに代入する trainX = trainX.values.reshape(-1, 1) testX = testX.values.reshape(-1, 1) # 回帰のモデルの箱を用意する # モデルを作る為にはまず、モデルを表す箱が必ず必要となる # 変数名をmodel1として、LR()を代入する model1 = LR() # 単回帰モデルを作る # fit関数を使う # カッコの中に、説明変数、目的変数の順番に書く model1.fit(trainX,y)
ここでこのようなリアクションがあればOK。
単回帰モデルが作れた。
次に作ったモデルの傾きや切片を確かめる。
# 傾きはcoef_を使う model1.coef_ # 切片はintercept_を使う model1.intercept_
このように表示された。
なぜ傾きが array([-2.5023821]) と配列で表示されるのかはわからないが、調べてもわからなかったので「こういうもんだ」と自分に言い聞かせて先に進む。
(エラーではないと思われる)
次はテストデータに対する予測を行う。
予測にはpredict関数を使う。
予測結果は変数predに代入する。
pred = model1.predict(testX)
# predで中身を見てみる
pred
このように表示され、テストデータに対する予測値が求められたことが確認できる。
ここも先程同様、なぜ数値が array([……………]) と配列で表示されるのかはわからないが、調べてもわからなかったので「こういうもんだ」と自分に言い聞かせて先に進む。
(エラーではないと思われる)
ここからDeep Analyticsへ投稿する準備を行う。
まずはsampleの中身を確認する
sample.head()
このように表示される。
日付の右の列(列1)に予測値が並んでいる。
今回求めた予測結果は列1に該当するので、ここに先ほど求めたpredを代入する。
# 代入 sample[1] = pred
sampleに正しく代入がされたか確認をするために、もう一度sampleの中身を確認する。
sample.head()
このように表示される。
当初と違う値が列1に代入されていることがわかる。
最後に投稿するために、代入をしたsampleをファイルで書き出す。
csv出力にはto_csv関数を使う。
今回必要なオプションは、"submit1.csv", index=None, header=None の3つである。
sample.to_csv("submit1.csv",index=None,header=None)
正しく処理されている場合はマイドキュメント内のcase1にsubmit1.csv というタイトルのファイルが書き出される。
↓無事できた。
本日はここまで。
次回は作成したファイルをDeep Analyticsへ投稿していく。