ChatGPT の Code Interpreter で|が 作ったAIモデルで某大御所アニメのじゃんけんに挑む

##  (7/18追記) 本番、無事に勝ちました

本人外出のため確認できませんでしたが、7月16日のツイートから、この日「チョキ」を出したことが分かり、無事に Code Interpreter は勝利を収めました。

Code Interpreter 先生の次回作にご期待ください。

https://twitter.com/jq1hkn/status/1680517391871012865?s=20

https://twitter.com/kumae_kugo/status/1680520132223815680?s=20

## はじめに
(=ﾟωﾟ)ﾉぃょぅ
KDDIアジャイル開発センターのはしもと（仮名）です。

去る7月7日の早朝、ChatGPTの有料プラン「ChatGPT Plus」の利用者向けに、 **Code Interpreter** という新機能が、ベータ版としてリリースされました。

https://twitter.com/OpenAI/status/1677015057316872192?s=20

この日から、SNSのタイムラインには `Code Interpreter 使ってみたけどやばすぎ...` のような投稿が溢れ、たちまち私の興味を欲しいままにいきました。

乗るしかないこのビッグウェーブに、私の中のギャルがそう言っています。使ってみましょう。

## 検証で使用したチャットログ
こちらです。
機械学習関連の用語の使い方や日本語がおかしい箇所が多々あるかと思いますが、見逃してやってください。

https://chat.openai.com/share/41433d35-8d00-4a3c-a59c-a9748581176f

## 課題設定
### Code Interpreter で何ができる？
とりあえずChatGPTで聞いてみます。最近はもっぱらこうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/0c6a1817-9884-825e-33ba-63dca6455a0e.png)

出てきました。`データの可視化`はタイムラインでもやってみた投稿をいくつか見かけました。
出力には含まれていませんが、Pythonスクリプトを作成したり、パワーポイントを作成するといったこともできるようです。

https://zenn.dev/karaage0703/articles/5df61d446684f9

その中でも特に気になったのが、**機械学習** の部分、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/81cc82cf-ac7f-31ad-ac5d-d2f25e07b2b4.png)
**「TensorFlow, PyTorchなどのライブラリを使って」**
なんと...。君、そんなこともできるんか...？

そんなこんなでやることを決めました
非データサイエンティストの憧れ、**サ◯エさんが次回のじゃんけんで出す手を予測してもらう**、これです。

### 「サ◯エさんのじゃんけん」とは？
「『サ◯エさんのじゃんけん』とは？」、じゃないんだよ。割愛します。

## データの準備
そうと決まればデータの準備です。
過去の手のデータですが、幸い下記サイトに **1996年以降の情報がまとまっています**。やばすぎる。

http://park11.wakwak.com/~hkn/

今回の検証は精度にはこだわらないため、直近7月9日放送回から遡り、2020年の放送回のデータまで準備しました。
準備したCSVファイルは次のようなものです。

```csvs:hoge.csv
年,月,日,事前に予想したサザエさんの手,自分の手,サザエさんが実際に出した手,勝負結果
2020,1,5,チョキ,グー,チョキ,勝ち
2020,1,12,チョキ,グー,グー,引き分け
2020,1,26,パー,チョキ,パー,勝ち
2020,2,2,チョキ,グー,チョキ,勝ち
2020,2,9,チョキ,グー,パー,負け
            ︙
2023,7,2,チョキ,グー,パー,負け
2023,7,9,チョキ,グー,グー,引き分け
```

さあ、あとは Code Interpreter がなんとかしてくれるはず、なんとかしてくれ！

## ChatGPT に O☆NE☆GA☆I する

最初の入力プロンプトはこのようにしました。
ChatGPTにやってほしいことを詳細に書いているのと、今回（無駄に）ディープラーニングを駆使してほしいので `モデルの性能を上げるため、Pytorchを使ったディープラーニングを行ってください。`と書いています。

最後に、求めている情報（`2023年7月16日の「サザエさんが実際に出した手」を推論してください`）も含めました。
```
このCSVを用いて、目的変数を「サザエさんが実際に出した手」とする推論モデルを作成してください。
モデルの性能を上げるため、Pytorchを使ったディープラーニングを行ってください。

また、完成したモデルを用いて、2023年7月16日の「サザエさんが実際に出した手」を推論してください。
```

### 前処理
アップロードしたファイルの中身を検査し、戦略を立てています。
`PyTorchを使ってディープラーニングモデルを設定します。`とあるので、想いは伝わったようです。

カテゴリ値のエンコーディングも当たり前のようにやってくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/32561259-52e5-6f4f-0b6d-58633c788e0b.png)

### ニューラルネットワークの実装
何か呪文のような用語がたくさん出てきましたが、きっと彼ならやってくれるはず。
どんどん進めてもらいましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/99aab6c1-d9e3-34fd-eaf3-a6138bfd7116.png)

### 一部カラムの削除
ここで、元のデータに含まれているが、直接結果に影響を及ぼさないであろう列を削除します。
そのままでも学習の過程で重みが小さくなりそうですが、この時点では推論はおろか学習も本当に可能なのかが不明だったので、明示的に指示を出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/5f74c140-b50a-0c7d-a6ee-91e55e12d744.png)

### 鼓舞

途中で急に投げ出されたりしても困るので、鼓舞します。
相手が誰であっても細かい気配りができる大人でいたいですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/b3edaf44-3d58-351e-56c3-2dbdf3fcd51a.png)

### 学習完了
そうこうしてるうち（詳細はチャットログ参照）に学習が完了しました！
テストデータに対する精度は〜〜〜〜〜？？？？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/a000c1bd-c50c-25ea-9d9a-23759f53d2c4.png)

Accuracy 56%、まあそうなります。何の問題もありません。
Done is better than Perfect.

### 推論
そしてその流れで、次回（2023年7月16日放送回）分の推論を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/4c2aee7a-476f-c48a-9603-7cb29c10737a.png)

**チョキ！！！！！！みんな！！！！！来週あっちはチョキを出す！！！！！！！！**

16日の夜6時50分ごろ、画面の前で高く拳を突き上げて僕と一緒に勝利を祝いましょう。なんだこの締め。


:::note info
なお、前掲のまとめサイトでも、7月16日放送回の予想は「チョキ」でした。
次週がチョキなら、3週連続チョキが続くことになります。期待しましょう。

http://park11.wakwak.com/~hkn/result2023.htm#:~:text=16-,%E3%83%81%E3%83%A7%E3%82%AD,-%E3%82%B0%E3%83%BC
:::



## まとめ
何もわからないまま Code Interpreter でディープラーニングを用いた推論モデルができました。
もちろんこのままプロダクトや業務で利用というわけにはいきませんが、「とりあえずニューラルネットに突っ込んでみる」だけであれば手軽に試すことができます。

ステップごとに実装に必要なPythonのコードも出力されるので、それをベースに実装を始める、またはカスタマイズすることもできます。
非データサイエンティスト、引いては非エンジニアには非常に嬉しい機能なのではないでしょうか。

すごいぜ Code Interpreter！