40代プログラミング初心者がAidemyを受講してみた。

##はじめに

####自己紹介
・40代前半
・男性（既婚）
・製造業（従業員20名）管理職
・プログラミング経験なし
・データサイエンス経験なし

####Aidemyを受講しようと思ったきっかけ
・製造業でのAI活用が増えていることでAIに興味を持った。
・機械の故障や品質の不具合など解決困難な問題に日々直面しておりデータサイエンスで解決できるのではと思った。
・AIで何ができるのかを具体的なレベルで知りたかった。
・Aidemyなら初心者でも出来そうなイメージがあった。

##本記事の概要
この記事ではAidemyで実施したこと、そこから得られた学びについて書いていきます。
40代初心者でも学習を進められるかなど、これからの受講を迷っている人の参考になるかもしれません。
初心者のため技術的な面では参考にならないと思います。

##実行環境
python3(Jupyter Notebook 6.1.4)
Windows10

##Aidemyでの学習振り返り
・受講したコース：データ分析コース（６カ月）
・学習時間：平日３０分～１時間位、土日１～２時間位

####１ヶ月目
最初の１ヶ月では、Python入門、Numpy、Pandas、Matplotlibを学びました。

私にとっては、添削問題の難易度が高く、コースの内容だけでは解けなかったためインターネットの検索を駆使しながら解いていきました。
Slackでも質問できましたが、わからないことがわからない状態で質問しても身につかないと思ったので、自分なりにある程度調べてから質問するようにしていました。

この時点で既に理解できないことが多く、挫折しかかりましたが、考え方や勉強法に問題があると考え、理解ができない背景や勉強法などについてインターネットで検索し勉強を継続しました。

Slackでの質問が少なかったので、もっと気軽に質問すれば良かったなと今になって思います。

####２ヶ月目
次の２ヶ月では、データクレンジング、データハンドリング、機械学習概論、教師あり学習（回帰）、教師あり学習（分類）を学びました。

エラーについてSlackで質問をし解消していく感じで学習を進めました。
質問の過程でエラーの意味が理解できてくると何となく要点がわかってきたので、Qiitaなどでエラー文を検索しながら理解を深めていきました。

この時点でもわからないことがたくさんありすぎて挫折しかかったのですが、プログラミング脳や考え方に関する検索をして挫折しないように進めていきました。

####３ヶ月目
次の３ヶ月では、教師なし学習、時系列分析、機械学習におけるデータ前処理、ディープラーニング基礎、自然言語処理を学習しました。

基礎のライブラリ（Numpy、Pandasなど）について理解が不足していると学習を進めることが難しいので、何度か基礎に立ち返ったりライブラリについてインターネットで検索したりして、ライブラリの理解を深めながら学習を進めていきました。

学習全体を通して何度か同じコードがでてくると、当初は理解できなかったものが段々理解できるようになってきます。
最初はわからなくても時間をかけて粘り強く取り組んでいれば理解できるようになってくるものだと思いました。

####４ヶ月目
次の４ヶ月では、株価予測、タイタニック号の生存率予測を学びました。

学習自体の難易度も高かったのですが、環境構築に時間がかかりました。
１人で考え込まずカウンセリングやSlackを活用しながら進めていくとスムーズにいくと思います。

株価予測とタイタニック号の生存率予測は、応用編であり理解が難しいので、全体を一気にやるのではなく、部分的にアウトプットしながら進めていくことで理解を深めていきました。


##作成したもの
Aidemyのデータ分析コースで作成した成果物を紹介します。

金属圧粉体の破壊荷重に大きな影響を与えている工程を特定するために重回帰分析を活用したいと思います。
重回帰分析を活用するにあたり、工程における複数のデータ（成形圧力、処理温度、粉体密度など）と金属圧粉体の破壊荷重データの関係について最も良い決定係数を算出したモデルとその値を確認することを目的とします。

重回帰分析とは、予測に用いる２つ以上のデータが、予測したいデータに与える影響度合いを分析する手法です。

決定係数とは、モデルが算出した予測データと実際の正解データが、どれだけ一致しているかを表す指標です。
正解データに対する予測データの誤差が小さくなる（予測が正しい）ほど決定係数の値が大きくなります。
決定係数は０から１の範囲内の値をとり、１に近いほど予測が正しいといえます。



まず必要なライブラリをインポートします。

```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.linear_model import ElasticNet

```


次に学習させたいデータを読み込み、データを教師用（Sinterd metal fracture strength以外）とテスト用（Sinterd metal fracture strength）に分けます

```python
siteredmetal_data = pd.read_excel("C:/Python/sinterd metal data.xls")

siteredmetal_train_X, siteredmetal_test_X, siteredmetal_train_y, siteredmetal_test_y = train_test_split(
    siteredmetal_data.drop('Sinterd metal fracture strength', axis=1),
    siteredmetal_data['Sinterd metal fracture strength'], random_state=42)
```

複数の学習器の構築を行い、最も大きい決定係数をmax_scoreとし、最も大きい決定係数のモデルをbest_modelとします。
学習器とは、学習モデル(学習方法)に沿って学習するように設計されたオブジェクトのことです。
教師用データ(train_X, train_y)を使って学習器に学習(model.fit)させ、教師用データとは別に用意したテスト用データ(test_X, test_y)を使って決定係数を算出(model.score)します。

```python
max_score = 0
best_model = ""
# 線形回帰
model = LinearRegression()
model.fit(siteredmetal_train_X, siteredmetal_train_y)
score = model.score(siteredmetal_test_X, siteredmetal_test_y)
if max_score < score:
    max_score = score
    best_model = "線形回帰"
# ラッソ回帰
model = Lasso()
model.fit(siteredmetal_train_X, siteredmetal_train_y)
score = model.score(siteredmetal_test_X, siteredmetal_test_y)
if max_score < score:
    max_score = score
    best_model = "ラッソ回帰"
# リッジ回帰
model = Ridge()
model.fit(siteredmetal_train_X, siteredmetal_train_y)
score = model.score(siteredmetal_test_X, siteredmetal_test_y)
if max_score < score:
    max_score = score
    best_model = "リッジ回帰"
    
print("モデル:{}".format(best_model))
print("決定係数:{}".format(max_score))
```

####実行結果
```python
モデル:リッジ回帰
決定係数:0.7169573759612197
```

最も大きい決定係数のモデルはリッジ回帰であり、その決定係数は0.7169573759612197であることが確認できました。


##今後の活用
ひととおりコースを受講し基礎的なことは学ぶことができたと思うので、あとは復習を行いながら実務への活かし方を考えていきます。
受講の過程でPythonやデータサイエンスによって出来ることと出来ないことについての知見を深めることができたので、今後は自分で出来ることは自分で行い、レベルの高いことは外部と協力して行っていきたいと思います。
外部と協力するにあたっても、今回学んだ知識を活かして、より無駄のない的確な要望を伝えられるようになったのではないかと思います。

##終わりに
今回Aidemyを受講してみて、やはり独学では難しいなと感じました。
「,」ひとつ足りないだけで挫折することもあるので、気軽に質問できる環境は必要だと思います。
私の場合、給付金を申し込んでいたので、やり切らなければ損するとの思い(家族のプレッシャー)から必死にやることができました。
未知のスキルを身につけたいと思ったときは、まず強い興味を持って楽しんでやることが重要だと思いますが、そこまで強い興味を持てない段階（特に基礎を学んでいる段階）では、仕事上での必要性を明確にすることや給付金の利用など後がない状態に自らを追い込むのもひとつの手だと思います。

また私のように挫折しやすい人は、短期間で身につけようと意気込むよりも、時間をかけなければ身につかないと割り切って学習を進めていくことが挫折しないコツではないかと思います。
私の場合「ある程度のことは１０００時間位かけなければわからない」とか「今くらいの勉強時間ではわからないのは当然」とか思いながら才能や年齢を理由に挫折しないよう心掛けていました。

私のような環境の人は「才能がない」とか「若くない」とかを言い訳にして「やらない理由」を作ってしまいがちだと思います。
大抵は「できない」のではなく、必要なことを「やらない」だけだと思います。

ハイレベルなことはできないかもしれませんが、やれば確実にできるようになることはあります。
より良い自分を目指して今後も学習を継続していきたいと思います。