1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サザエさんのジャンケン結果を予想するAIを作ってみた

1
Posted at

sazae-buster-ai

サザエさんのじゃんけん履歴を学習し、次回の手を予測して勝ちにいくミニ機械学習プロジェクトです。


リポジトリ:
https://github.com/SioComb/sazae-buster-ai/tree/main

概要

このプロジェクトでは、サザエさんじゃんけん研究所の公開データをもとに、
サザエさんが次回出す手を予測します。

目的は、機械学習そのものの精度を極限まで高めることではなく、
以下の流れを実際に手を動かして理解することです。

  • データ収集
  • データ整理
  • 訓練データ / テストデータ分割
  • 特徴量作成
  • 教師あり学習
  • 分類モデルによる予測
  • 評価指標の確認

使用技術

技術 用途
Python メイン処理
uv Python環境・依存関係管理
requests Webページ取得
BeautifulSoup HTML解析
scikit-learn 機械学習モデル
csv CSV読み書き

データについて

データ元は以下のサイトです。

各年の結果ページは、以下のようなURL形式になっています。

http://park11.wakwak.com/~hkn/result1996.htm
http://park11.wakwak.com/~hkn/result1997.htm
...
http://park11.wakwak.com/~hkn/result2026.htm

各年のページから、以下の情報を取得しています。

項目 内容
date 放送日
hand サザエさんが実際に出した手
source_url 取得元URL

データ件数

全データ件数: 1521件
訓練データ: 1005件
テストデータ: 516件

例外データ

2013年12月1日は、1日に2回じゃんけんが実施された特殊回でした。

通常のスクレイピング処理ではこの2件が取りこぼされたため、
以下の2件を手動で補正しています。(コード修正がめんどうだった・・・後悔はしていない・・・)

2013-12-01,グー
2013-12-01,チョキ

データ分割

今回は手作業で以下のように分割しました。

1996年〜2015年 → train.csv
2016年〜2026年 → test.csv

時系列データなので、ランダム分割ではなく、古いデータで学習し、新しいデータで評価しています。


学習方法

今回の初期モデルでは、直近3回のサザエさんの手から、次回の手を予測します。

入力X:
3回前の手, 2回前の手, 1回前の手

正解y:
次回の手

例:

チョキ → グー → グー → パー

この場合、学習データは以下のようになります。

3回前 2回前 1回前 正解
チョキ グー グー パー

モデル内部では、手を以下のIDに変換しています。

ID
グー 0
チョキ 1
パー 2

使用モデル

初回モデルでは、scikit-learn の決定木を使用しました。

DecisionTreeClassifier(
    max_depth=3,
    random_state=42,
)

実行結果

データ確認

訓練データ

件数
グー 322
チョキ 349
パー 334
合計 1005

テストデータ

件数
グー 167
チョキ 186
パー 163
合計 516
訓練データ 先頭5件: ['チョキ', 'グー', 'グー', 'パー', 'チョキ']
訓練データ 末尾5件: ['パー', 'チョキ', 'グー', 'パー', 'パー']
テストデータ 先頭5件: ['チョキ', 'グー', 'チョキ', 'グー', 'パー']
テストデータ 末尾5件: ['チョキ', 'チョキ', 'パー', 'グー', 'パー']

学習データ確認

データ 件数
X_train 1002
y_train 1002
X_test 516
y_test 516

評価結果

正解率: 0.529

じゃんけんは3択なので、ランダム予測なら期待正解率は約33.3%です。

今回の初回モデルでは、テストデータに対して 52.9% の正解率となり、ランダム予測を上回りました。

分類レポート

precision recall f1-score support
グー 0.71 0.46 0.55 167
チョキ 0.52 0.49 0.50 186
パー 0.45 0.65 0.54 163
accuracy 0.53 516
macro avg 0.56 0.53 0.53 516
weighted avg 0.56 0.53 0.53 516

混同行列

[[ 76  45  46]
 [ 14  91  81]
 [ 17  40 106]]

行が実際の手、列が予測した手です。

実際グー    → グー76 / チョキ45 / パー46
実際チョキ  → グー14 / チョキ91 / パー81
実際パー    → グー17 / チョキ40 / パー106

次回予測(5月3日放送分)

最新3回は以下でした。

最新3回: ['パー', 'グー', 'パー']

モデルの予測結果は以下です。

サザエさんの次回の手予測: チョキ
こちらが出すべき手: グー



・・・・・・・・あたるかな?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?