見出し画像

ゆるプロ!番外編「単回帰分析と機械学習して予測させる」

ゆるいプログラミング講座、略して「ゆるプロ!」
これは気軽に気楽に試せるゆるーいプログラミング学習コンテンツである。今回のお題は「単回帰分析と機械学習して予測させる」

昔の記事

前提)

Pythonで以下のライブラリを使用するので必要に応じてインストールしておく

pip install matplotlib
pip install scipy
pip install scikit-learn

※ちなみに数学はイマイチなので、正しい説明、解釈は期待しないでほしい

例)単回帰分析と機械学習して予測させる

単回帰分析の式って、中学か高校で習う一次方程式で表される。印象としては相関が認められる場合に事象を式にして予測する行為に見える

$${ y = ax + b }$$

さて、自分もはじめて教科書から機械学習を学ぶわけだが、せっかく予測するのであれば自分にとって有意義になることがいい。自分にとって有意義そうなことに使おう

例えば、フォロワーの人数と記事の作成数が相関すると決めつけた上で、フォロワーを何人目指したいかによっていくつの記事を書けばいいのか試行する。無作為に5件ほど抽出した

import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

follower = [[56],[10463],[7],[6000],[6400]] # follower_num
article = [[40],[180],[9],[200],[1200]] # article_num

model=LinearRegression()
model.fit(follower,article)

plt.figure()
plt.scatter(follower,article,marker='o', s=80, c='green')
plt.plot(follower, model.coef_ * follower + model.intercept_)
plt.title("Relation Between follower and article")
plt.xlabel("follower")
plt.ylabel("article")
plt.axis([0,12000,0,2000])
plt.grid(True)
plt.show()

# 予測
goal=model.predict([[1000]])
goal_round = round(goal[0][0])
print("1000 フォロワーを目指すときは", goal_round, "記事が必要であると予想する")

# 決定件数の算出
score = model.score(follower,article)
score_round = round(score,2)
print("r-squqred", score_round)

結果)

たくさん書いてフォロワーが多いのと、少ない件数でフォロワーが多いのと2極化している
# 予測
1000 フォロワーを目指すときは 180 記事が必要であると予想する
# 決定係数
r-squqred 0.14

「まじかよ・・・」と思ったが決定係数が0.14であり信用できないなと思ったが、何か見落としている要素はあるのではないか?実は正しいのではないか?とか色々と考え出す。一度、数字に落としてみると振り返るきっかけになってよい。「自分の記事は質が低いのではないのか」とかね

※前述の通り相関関係は踏まえていない。別途、どこかで相関関係にあるかも調べる記事を書いていきたい

ちなみに数打ち戦法を除くとこうなる

1000 フォロワーを目指すときは 54 記事が必要であると予想する
r-squqred 0.8

いずれにしても、自分の記事は質が低いのでは?とか思う。もちろん、想定できていない事象もあるけどね。毎日noteは効果があるのかなど、新たな疑問点が出てきてよい

感想)

Excelの近似曲線と何が違うんだ?というのが正直な感想だ。昔から統計学である話題で新しいことはない。自分で式を作れれば予想できるのはないか?(数学の計算をする気はないが・・・)少なくてもExcelの近似曲線には式が算出されるため自分で予想できるだろう。いずれにしても(途中から)手計算でしていたのをコンピュータにさせてしまおうというのが、機械学習と予想するということではないか?

でも、巨大な機械学習の理論を学ばなくても、教科書で片鱗が見えるように感じさせられたのは面白かった。

自分にとってプラスとなりうる(役立つ)お題(仮説)をテーマに使うのがオススメかと

意見)

今回も教科書より学んだのだが「分析者による判断により」と著者の補注(保険)が掛けられていることから見て、改めて、統計は答えを出してはくれないと思った。結局、決断することが重要であって人に委ねられるのだ。従って、データサイエンティストだ、機械学習だと言っても、大したことではなく、それらを学べば自分の未来がよくなるというのは間違いだ。宣伝する人は過剰な広告、学習を検討する人に過度な期待をさせてはいけない。(口に出さない潜在的な期待を描かせてはいけない)

極端な話、本人が決断さえ出来てしまえば数値化はいらないし、数値化する行為すらいらない。数値は答えにはならないため、エビデンスにはならないからだ。数値はあなたが失敗したことを保証してくれない。やっぱり、道具(参考情報)として使うだけなのだ。

氷菓のさとしが「データベースは結論を出せない」と言っていたが、同様に「統計は答えを出さない」のだ。分析する人は数値が答えを出してくれることを求めてはいけない。答えを出すのはあなた自身だ。これがめちゃくちゃしんどい。誰しも決断なんてしたくないし責任を取りたくないからだ

それよりも主観的にでもいいから、自分が仮説を立てて使うこと(決断することがセット)に出来れば楽だ。個人の活動は特にしやすい

参考)

情報Ⅱ(日本文教出版)P138~P139のコードを参考に、自分の目的に合わせてデータの内容を変えた

Matplotlib

SciPy

scikit-learn

noteのTeX表記について

おわり!