<はじめに>
はじめまして。29歳レガシーSEことBOSSです。
まず、レガシーSEって?と思われる方がいらっしゃるかもしれないので、簡単に説明しておきますね。
私は新卒で現会社に入社してからプログラミングを学びましたが、会社が使っているシステムがオフコン(1970年代後半から1990年代に多くの企業で導入されたシステム)だったこともあり、RPGというその開発言語しか扱えません。
現代の代表的なプログラミング言語だと、Java,PHP,Python等ありますが、私はそれらが一切使えないのです!!(だからレガシーSE)
そういった経緯もあって、何か新しい知識を取り入れたいなと思い、目まぐるしい成長を遂げているAIに興味を持ちました。そもそもAIって何なの?状態だったのですが、ネットサーフィンで情報収集をしてもいまいち理解できず(ニューラルネットワークって?とか)、それならいっそのこと作ってしまえ!という結構安易な気持ちでアイデミーさんのプレミアムプランを申し込みました。
これから伝えていく内容はそこで得られたもの、できるようになったこと、感じ取れたことになります。
<概要>
このブログを読んでほしい人:
・AIに興味がある!
・AIを作ってみたい!
・AIを学ぶスクールで迷ってる!
と思っている人。
このブログを見てわかること:
・データ分析の仕方。
・AI初心者がスクールでの学習を通してできるようになるであろうレベル。
このブログであまり扱わないこと:
・データ分析モデルのアプリ導入
・そもそもの開発環境云々
では早速始めていきます。
<アイデミーでの学習>
私が選択したアイデミーでのコースは「データ分析コース(3か月)」になります。
ほかにもAIアプリ開発コースや、画像認識コース、自然言語コース等ありましたが、私はビッグデータの分析に興味がありましたので、データ分析コースを選択しました。
学習が始まるとまずは開発環境を整えていくのですが、ここはアイデミーさんのわかりやすいマニュアルがあるので問題ないと思います。
PCローカルにサーバーを設置したり、専用のソフトをDLしたりする必要がないのが楽でしたね。
<1か月目>
専用のカリキュラムを用意してもらい、一つずつ課題をクリアしながら進めていきます。
最初の講座はPython入門。
機械学習のコーディングで幅広く使われているプログラミング言語です。
専用の教材が用意されているので、その教材を専用の開発環境上でプログラムを動かしながら学んでいきます。
最初はインデント(段落)や変数の扱い方等慣れない部分もありましたが、わかりやすい動画もついていますので、割とすんなり頭に入ってきました。
Pythonの基礎を学習すると、そこから「Numpy」※1、「Pandas」※2、「Matplotlib」※3、「データクレンジング」を学んでいくのですが、、、まぁ覚えることは多かったです。そもそもデータ分析における工数は、データの準備工程が8割を占めると言われていて、これらの知識を活用してデータを作り上げるんですね。なのでここが土台になり、最も時間をかけて学ぶべきところなのではないのかと思いました。
※1、※2、※3 Pythonの機械学習分野で幅広く使われているライブラリ類。(ライブラリとは様々な便利処理を関数として定義したものをひとまとめにした箱のようなもの・・・と私は覚えている)
※1 「Numpy」とは主に数値計算を行うライブラリであり、大量のデータ処理にかかる時間もこのライブラリを利用すれば短縮できる
※2 「Pandas」とはデータ分析を効率的に行うライブラリであり、データの読み込みや統計量の表示、グラフ化、データ分析が容易にできる。
データ分析コースではこのPandasが必須ライブラリであり、データの準備工程では大活躍でした。
※3 「Matplotlib」とはグラフ描画ライブラリのこと。2次元、3次元のグラフを簡単に表示することができるようになり、主にNumpyと組み合わせて利用される。
<2か月目>
さて、ここまでPython3の機械学習分野における基礎を学んできましたが、いよいよデータ分析に突入します。
まず初めに学んだのは「機械学習」とは?という内容になります。
「機械学習」とはデータから反復的に学習し、そこに潜むパターンを探し出すことを言います。
図のように「機械学習」は「人工知能」の一部になり、「機械学習」の中に「深層学習(ディープラーニング)」と呼ばれるものがあります。
ひとえにAI、AIと言ってましたけど、AIの定義が広すぎて私が認識しているAIとはどこに当てはまるのかを学習できた部分になります。
機械学習の主な手法
次に機械学習で使われる主な分析手法をご紹介します。
・教師あり学習
教師あり学習とは正解データ「教師」が用意されている学習のことです。
主に分類問題(カテゴリを予測するもの)、回帰問題(数値を予測するもの)に使われます。
・教師なし学習
正解データ「教師」が用意されている教師あり学習に対して、その正解データが用意されていないのが教師なし学習です。
教師なし学習は与えられたデータの類似性や規則性を見出して学習を行います。わかりやすい例で言うと、ネットショップなどの「この商品を見た人は、こちらの商品も見ています。」みたいなレコメンデーションなどです。ちなみにこれはアソシエーション分析という手法を使用しています。
・強化学習
強化学習は最近最も注目されている学習法で、行動による環境変化を観測し、その結果得られる価値を最大化していくというものです。
正解ラベルも大量のデータも必要としない自立的な学習になります。
ここは私もいまいち理解しずらい部分ではあったのですが、世間では囲碁や将棋などで対戦するAIロボットのことを指すそうです。
<3か月目>
3か月目は、2カ月目に学んだことを生かして「時系列分析」や「深層学習(ディープラーニング)」に挑戦します。
・時系列分析
時系列分析では時系列データ(時間の経過とともに変化するデータ)を利用して、分析を行います。
具体的にはある会社の毎月の売上高の記録、毎日の日経平均株価の記録などです。
ここでは定常時系列の解析において、近年注目を浴びていて、様々な企業のアプリケーションにも導入されているという「SARIMAモデル」の実装を行います。
・深層学習(ディープラーニング)
聞いたことがある方もいらっしゃると思いますが、ディープラーニングとは機械学習の一種であり、さらに一歩進んだ技術です。
データの分類や回帰を行うために、生物の神経ネットワークを再現した「ディープニューラルネットワーク」というモデルを用いて予測を行います。
上図のように生物の神経ネットワークは、読み取った情報に対して何層もの情報伝達を繰り返し、より精度の高い答えを導きだします。
この構造を再現し、情報を入力する層を「入力層」、情報を出力する層を「出力層」、入力と出力の間の層を「隠れ層」としてモデルの構築をいっていきます。
ここまで内容は非常に濃いもので、細かい部分は割愛してますが、
最後に最終課題として自分のオリジナルデータにてデータ分析を行っていきます。
<最終課題>
オリジナルデータを用いてデータ分析に挑戦!!
これまでは用意されたカリキュラムに沿って、用意されたデータを利用し、分析を行ってきました。
では実際自分でモデルを選択し、分析を行ったらどうなるのでしょうか。
挑戦してみました。
・予測するもの
ある倉庫に入ってくる未来の入庫数
・用意したデータ
ある倉庫の日別の入庫数を記録したデータを3000件用意。
このテーマに沿ってデータ分析を行っていきます。
まずは基礎中の基礎として、線形回帰分析を行っていきたいと思います。
なんだか凄い折れ線グラフになりました。
2012年から2020年にかけてのデータになりますので、ちょっと多すぎたかも・・・
読み取った生のデータのままでは予測ができないので、dateを数値に変換してあげます。
変換したら、読み込んだデータを学習用のデータとテストデータとで分割してあげます。(比率は7:3)
線形回帰を行うライブラリをインポートし、学習用データを用いて学習させます。
変数(y_pred)に予測データを格納します。
ここで変数(y_pred)の内容を表示しています。
最後に予測したデータ(y_pred)と正解データ(y_test)の誤差を見るため引き算を行います。
結果が0(誤差なし)であれば精度の高いモデルとなりますが、御覧のとおり、22038,-34668・・・・とひどい有様に。
これは予測したいことに対してデータモデルが適していないため、このような結果になりました。
どんな因果関係があるかわからないデータ分析においてモデルの選択や、特徴量(何をもって予測するか)の選択は大事だなと思い知らされました。
気を取り直して、次は様々な企業アプリケーションにも導入されているSARIMAモデルを使った分析に切り替えていきたいと思います。
SARIMAモデルは時系列データを扱った分析に長けていて、今回私が用意したデータに適しているだろうとの判断です。
まずはデータの読み込み。読み込んだデータをデータフレームに格納していきます。
(かなり端折ってますが、このデータを用意するまでに行ったクレンジングに一番時間がかかっていて、Pandasを駆使して血みどろな思いでデータを完成させました。アイデミーのサポートさんには本当にお世話になりました。迷惑かけてごめんなさい・・・)
データを学習用データとテストデータに分けます。
データ量が多いので、今回はテストデータを100件に絞っています。
SARIMAモデルの最適なパラメータを求めるために、BIC(ベイズ情報量基準)のロジックを利用します。
周期は日ごとなので7と設定。
先ほどのBICで求めたパラメータを利用して、SARIMAモデルに学習させます。
変数(pred)には予測データを格納し、グラフを表示させます。
・・・この時点で気付いてしまうのですが、予測数量にマイナスを取ってしまっています・・・
用意したデータにマイナスの入庫数なんてないだけに、もう適していないことがわかります。
念のため正解データとの誤差を求めました。
数値として0が正解になりますが、220502,-10297・・・・・
はい。ダメでした。
今回の2つの分析手法(線形回帰、SARIMAモデル)を使用してみて結果は散々でしたが、
やはり目的(予測したいこと)に対して何をもって予測するのかを考えるのが非常に大事だと思いました。
今回は学習した内容をもとに分析を行い、予測をしてみましたが、自分の用意したデータに対してどんなことに因果関係があるのか、をもっと考える必要があったかと思います。
今回はここまでになってしまいましたが、データのクレンジング手法や様々なモデル実装手法を学ぶことができたので、
めげずにチャレンジしていきたいと思います。(次は気象庁の天気データでやってみようと思います・・・)
<今後の活用>
3か月のデータ分析コースの受講を通じて、データ分析の基礎、AI全般に対しての理解が深められたと思います。
しかし日々発展が目まぐるしい業界なので、ここで学んだことだけでなく、どんどん情報をキャッチアップしていく必要があると実感しています。
今後の一つの目標としては需要予測モデルを作成し、アプリに組み込むところまでをやってみようと思います。
まだまだ未熟ですが、どんどん自分で試して、理解して、人間の生活を豊かにしていけるAIを導入できる人材になっていきます。
<おわりに>
最後になりますが、ここまで読んでくださった方。本当にありがとうございます。
多分その中にはAIを学びたい!と思われてる方もいらっしゃると思います。
私ごときのアドバイスで恐縮ですが、アイデミーさんの学習環境は素晴らしいと思います。比較対象がないので、信用度は低いですが、少なくとも私は多くのサポートを受けることができ、データ分析モデルの実装まで行うことができました。
本当はもっと内容が濃くて伝えたいこと沢山あります。ですが、それは実際にプログラムを受講してみて感じ取ってみてください。
受講中はきっとあなたの人生をより濃いものしてしてくれると思いますよ。
以上、BOSSでした。