見出し画像

AI2nd day15 総合実践その1



day14 Q&A

・データの考え方について

→現実世界のデータ(多次元)を、いかにしてデジタルにもっていくか。つまり、縦横2次元のデータに落とし込んでいくか?という考え方が重要。

・業務改善が難しい場合はあるか?

→やってみなければ、わからない。可能不可能を事前に判別することは、不可能。
現場の人間が優先順位をつけて、「ここができるようになると、すごく楽になる」というところ(優先順位の高いところ)にまず取り組んでいくことが重要。

本編 実践編

今まで、データ活用施策の以下フローに則り、、データ収集からパイプライン/DWH作成、そこからの分析やAIモデル/アプリ作成などをこれまで学んできた。

今回、一連の流れを実際にお題を作ってみて、取り組んでみる。
お題は、以下。

お題(テーマ)

このお題はフィクションです

ステップ1:データ収集 

deep researchでデータを検索してもらうor自分で検索してオープンデータを拾っていく。ここで注意すべきなのが、chatgptが得意なことと不得意なことを意識すること。

何も考えずにお題の文章をそのままchatgptに投げるのは、よくない。chatgptも人間のバイアスを排して答えてはくれるけど、フワッとした形に終始してしまう。(誰でも思いつきそうな考えや思考におさまってしまう)
chatgptは、それっぽく答えてはくれるものの、「何が必要なのかを考える」ことは得意ではないから。

データサイエンティストが求められていること:施策の提案(何をすべきか)
明確な答えはなく、答えの形式も存在しない。

ステップ2:得られた実データを可視化させる

全体の戦略を立てられるように、得られた県内の自転車盗難のデータ(csv)を、Google colabを用いて可視化する。
プロンプトは、以下。

添付したcsvファイルは、愛媛県における2021年度の自転車窃盗のオープンデータです。 これからデータ分析や予測モデルの作成を行いたいと考えています。
それに先立って、データの全体像や特徴を把握したいです。 Google Colabを使ってグラフ化などをしたいので、そのためのプログラムを書いてください。

Excelでもいいのではと思われるが、Excelの場合は縦軸横軸をどうするかなどのロジックを人間側で考える必要がある。たとえコードのエラーで複数回やりとりする必要があるとしても、chatgptにコードを出させてグラフ化させた方が早い。さらに、得られたグラフだけでなく、別軸のグラフを出力させる(カスタマイズ)も可能。

こうして以下2つのグラフが得られた。

市町村別の件数
月ごとの件数

ステップ3:モデルを構築する準備(前処理を行う)

ここで、収集で得られた以下のようなデータは定性データ(いわゆる数値ではないもの)である。AIは関数であり、数値Xを入れて数値Y(目的変数)が出力されるという仕組み。
このため、数値(定量データ)に置き換えることを考える必要がある。

現段階での仮説(目的変数)を定めるために、chatgptに言語化の手伝いをやってもらう。以下はプロンプトの例。

私たちは今愛媛県の自転車窃盗のデータをもとにデータ分析をしたり、予測モデルを作ったりすることをやろうとしています。
それにあたってまず以下のデータをもとに予測モデルを作りたいと考えています。そのためにまず何を仮のゴールにするのかと言うことを考えたいです。一緒にその考える手伝いをして欲しいです。
今のところの考え方として、その日ごとの自転車セットの発生確率がわかるとか、あるいは発生する可能性の高い場所がわかるとか、そういったことは良いゴールになるかと考えているのですが、他にもいくつか着地点のアイディアをもらえるとうれしいです。何個か洗い出してもらって、私の出したアイディアとともにデータを見ながら妥当性の評価を出してください。

こうして壁打ちをしながら、仮説のゴールを「翌日特定の時間帯における自転車盗難発生のリスク/確率を予測する」ことに設定。具体的には、「発生の有無」を予測するという分類モデルを利用。

auto MLに入力するための前処理として、データを特徴量と目的変数に整理する。そのためのプロンプトの例は、以下。

次のステップとして、データの前処理をやりたいです。方針として、「発生するかしないか」という分類モデルを用いた予測を行おうと思っています。
日付×時間帯、つまり「何日の何時台に発生するか、しないか」という予測をしたい。
データの変換をする必要があり、CSVのデータを受け取ってその変換をして返してダウンロードさせるための、google colab上で使えるプログラムを出してください。

これでうまく行かないときは、自分で表を設計してみる。
例としては、以下。date(日付)、hour(時間帯)、目的変数y(発生有無を0,1で表現)、そしてis_holidate(祝日か否かを0,1で表現)。

表設計の一例

ステップ4:auto MLに入力

修正して得られたcsvデータをauto MLに入力する。
得られた結果が、以下。


どうやらMaxAbsScaler,RandomForestというモデルが最も精度が高いらしい。

AUCという指標が表示されている。
AUCはArea Under the Curveの略で、主に二値分類モデルの性能を評価するための指標。AUCはROC(Receiver Operating Characteristic)曲線=真陽性率(TPR)と偽陽性率(FPR)の関係を描いたグラフの、下の面積を表す。

AUCの値は0から1までの範囲をとり、1に近いほどモデルが陽性と陰性をうまく区別できていることを意味する。AUCが高いモデルほど、総合的な識別性能が高いと判断される。

ただ、上図ではMaxAbsScaler,RandomForestとVotingEnsembleのAUCは同じ。他にどのような要素を持って前者がベストと判断しているのかをchatgptに聞いてみた。

✅ AUC以外の指標(Precision, Recall, F1-score, Log Lossなど)で優位だった
✅ モデルの解釈性が高く、実際の活用に適していた
✅ 計算コストや推論速度がVoting Ensembleより優れていた
✅ ハイパーパラメータの最適化が成功していた
✅ Voting Ensembleの内部モデルの組み合わせに課題があった可能性がある

また、どうやらdateが最も影響している(圧倒的)とのこと。

感想

実際の流れがわかってきたのと、講師の方がchatgptと壁打ちしている、エラー解決しているところを実際に見ることができるのは非常に有益。
ただ、今回のazure MLの結果の解釈や、次の手をどうするのかについては、まだ浮かんでこない。次の講座でやっていくことになるのだけど、まだまだ慣れと修練が必要。

いいなと思ったら応援しよう!