[ChatGPT Hack] Code Interpreter で、データのファイルをアップロードしただけで、機械学習のモデル作成できた。シンプルなものだけど

# 背景

Code Interpreter の Plugin が大きな可能性を持っています。現状のアルファ版でも、比較的シンプルなタスクはこなせてしまいます。
私の少ない経験からですが。
Deep Learning のネットワークを組めるような高い技術力は確かに役に立ちます。それでも、実社会・ビジネスの現場では、意外と**シンプルな機械学習や深層学習のモデルで十二分効果・価値を発揮する場合も多い**んです。

今回は機械学習の**モデルの作成**と、そのモデルファイルの**ダウンロード**を試しましょう。

# 注意事項
:::note alert
注意点:
- ChatGPT の 有料プランが必要
- Python のコードは sandbox 環境で実行される
- インターネットへのアクセスは出来ない
- 明文化されたドキュメントを探せなかったのと、各種リスクが不明瞭。そのため、OpenAI の ChatGPT では、機密情報は扱わない事。
- 現在の Code Interpreter が扱えるストレージサイズはそれ程大きくありません。
:::

# すぐに使える Resources

Prompt 履歴:
https://chat.openai.com/share/7cd522df-fdba-452a-8ebb-b325f2f3a7ed

Prompt のテキスト:
https://github.com/dahatake/ChatGPT-Prompt-Sample-Japanese/blob/main/%5BPlugin%5D%20Code%20Interpreter/%E5%88%86%E9%A1%9E%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90.md

# 手順

Azure Machine Learning の**チュートリアル**のデータセットを使います。つまりある程度綺麗なデータセットです。ある程度😊

https://learn.microsoft.com/ja-jp/azure/machine-learning/tutorial-train-model?view=azureml-api-2

## 1. データの準備

Code Interpreter は**インターネットにアクセスできません**ので、データセットをダウンロードします。

データセット
https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv

このデータセットは、クレジットカードの顧客情報などから、デフォルト、つまり支払い能力がなくなりそうな顧客の情報が入っています。

## 2. Code Interpreter の Plugin を有効化して、Prompt 入力

Code Interpreter の Plugin を有効化した上で。Prompt の入力準備をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/1254b6b3-d91e-7ce6-347a-ab051d3a32be.png)

## 3. ファイルのアップロード

先ほどダウンロードしたCSVのデータセットをアップロードします。
Code Interpreter を有効化していると、このスクショの様に、Prompt の入力画面に + アイコンがついてファイルのアップロードが出来るようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/0cbd84f2-d81e-5f26-1b31-e26de5dacd5d.png)

これで準備完了です。

## 4. Prompt 入力

以下の例のようにPromptを入力していきます。

```cmd
### 役割 ###
データサイエンティストとして振舞ってください。

### 指示 ###
機械学習の分類モデルを作成します。アップロードしたファイルをトレーニングデータとテストデータとして扱います。
```

実はこの後の出力文字列をみて。
初めて実施した際には、私は驚いた表情がちょっとの間消えませんでした...😲

この出力のスクショを見てください。
何と**Feature Engineering** の一部をやってくれています!
- データセットの基礎集計
- 欠損値の確認
- データ型の確認
- 目的変数 (ターゲット変数) の分布の確認
- 文字列などの説明変数の不均衡の是正。**標準化**の実施。**重みづけ**の実施。

そして
- **学習用とテストデータの分割**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/4e1d1ecf-3060-cbbd-d3a4-cea99211c640.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/5246a595-d2e1-764c-9b7c-c785d4fc41d1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/0e57a25e-4790-f421-de9d-14bcb9c97a26.png)


神すぎますよね!
AutoML の中でやってくれている事。Scikit-learn のパッケージのみでやってくれているようです。
これ、毎日データを見ている人であれば習慣化されているかもしれませんが。私は、都度マニュアルなどでタスクの抜け漏れチェックしないと無理です。タスクの網羅性が高いですよね。

ここで是非、[show work]を押して、Python のコードを確認していただきたいのです!
「動けばいいや」ではなく。Pandasにこんな便利な関数があるんだな。と、学ぶ機会にしていただきたいんですよね。私も毎回勉強になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/45235c61-3c80-fa20-5e78-1c5324d1d865.png)

そしてですよ...
何と、特に指示をしていないのですが、学習の実施をしてくれているんです!!!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/bf38556c-9887-02fc-0ba9-1a858b40470a.png)

これは予想してなかったんです。全くもって!!!😍

こちらが Code Interpreter が作成してくれた学習用のコードです。

```python
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score, confusion_matrix

# Scale the features
scaler = StandardScaler()
features_train_scaled = scaler.fit_transform(features_train)
features_test_scaled = scaler.transform(features_test)

# Train the model
model = LogisticRegression(class_weight='balanced', random_state=42)
model.fit(features_train_scaled, target_train)

# Make predictions
train_preds = model.predict(features_train_scaled)
test_preds = model.predict(features_test_scaled)

# Calculate performance metrics
train_accuracy = accuracy_score(target_train, train_preds)
test_accuracy = accuracy_score(target_test, test_preds)
test_recall = recall_score(target_test, test_preds)
test_precision = precision_score(target_test, test_preds)
test_f1 = f1_score(target_test, test_preds)
test_cm = confusion_matrix(target_test, test_preds)

train_accuracy, test_accuracy, test_recall, test_precision, test_f1, test_cm

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/9d8b648f-f051-c2c9-37ca-359ebd4f94e1.png)

マジで神すぎますよね!

**Confusion Matrix** まで作成してくれて。文字列なのがいまいちですが😅それでも、その説明文まで作成してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/daf9e34f-1993-13e4-c6e7-d3965bed8aa5.png)

マジ、初心者はこれで十二分。**初めての機械学習にはこれで十二分!**

たった1度のPromptでモデルの学習実行まで行ってくれました。
勿論、Logistic Regression 以外の方法も試してみたいでしょうし、Hyperparameter Turning も試してみたいでしょうし。それは次のフェーズでやりましょう。

## 5. モデルの出力

```cmd
作成したモデルをファイルに出力してください。
```

はい!
あっという間にファイルがダウンロード出来る状態になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/db5aeb18-fe71-2d6c-ebb4-0e22df383d72.png)

## 6. 推論用のコード作成

これも作成させちゃいましょう😊

```cmd
先ほどの2つのモデルのファイルを読み込んで実行する Python のコードと pipのrequirement.txt と docker file を作成してください。
```

結果のスクショ:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/6f8592d7-f154-effd-08bb-d57cbd9a4f11.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/71e60db3-d31e-1a73-271f-42af9fdbe57d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/9c811cc2-a1e4-bf76-0bed-8824fff045a0.png)

Web用なのか、どこで実行するのか指定が無かったので。一番シンプルなコードを作成してくれました。
Promptで直すもよし、Visual Studio Code + GitHub Copilot で直すもよし。皆さんのお好みで。

# まとめ
データセットさえ用意すれば、**初歩的な**機械学習の手法で済むモデル作成までは、いとも簡単にやってくれます。一番私が重要視しているのは、作業時間です。データセットさえ用意されていれば、**全ての工程は10分かかりません**。勿論、データ量が増えたりすれば、もっと時間を要するでしょうが。

圧倒的な生産性。圧倒的な学習環境。明るい未来しかりありません。ともすれば機械的な作業になりがちな Feature Engineering のカバー。
次のステップも試したくなりますよね。次はまず AutoML の実行ですかね。

## どんな価値がありそうか?

その**価値**を私なりに考察します。この Blog Post は**ビジネスユーザー**にとっての価値が高いと思います。**現場の人**と言い換えましょうか。

データについては、データサイエンティストじゃなく、**そのビジネス・業務に関わっている人の方が全然詳しい**です。その方が、学びながら、その場で機械学習のモデル作成が出来てしまう事が重要です。非常に価値が高いと思います。

- [トレーニング] **プロのデータサイエンティストがいなくて**も、いつでも、どこでも、タスクの内容を説明してくれる
- [速さ] 基礎的なモデル作成であれば、推論環境の準備までが早い。基礎的な機械学習の環境構築も不要
- [網羅性] 基礎的な機械学習の、データの理解、データ加工、機械学習の実行とモデルの作成、そして推論用のコードの作成が出来る

拡張性も勿論あるわけです。

- [成果物] 成果物をファイルとしてダウンロード出来る。細かい調整は Visual Studio Code + GitHub Copilot ですればいい。例えば PyTorch は入っていないので。Deep Learning が必要になったら、Code Interpreter 無しの ChatGPT で PyTorch のサンプルコードを再作成して、Visual Studio Code で動かせばいいわけで。
- [トレーニング] Python のエラーメッセージなど、自身が腑に落ちていないコトを、説明文を読んでみたり、Bing Chat や ChatGPT に「子どもでも分かるように説明して」と問いかけるコトで理解をしたり。それによって Bing Chat によって多くの場合たどり着ける公式ドキュメントを読める知識が得られる

つまり、全ての学生やビジネスユーザーにとって、試した方がいいものだと思います😊