ロト6予測ツール


予測開始画面

データ分析中
プロジェクト概要
過去のロト6抽選データを分析し、機械学習アルゴリズムを用いて次回の当選番号を予測するWebアプリケーションです。2つの異なる予測モデルを実装し、結果を比較表示することで、多角的な予測を提供します。
開発目的
- 機械学習を活用した実践的なデータ分析スキルの習得
- 複数の予測モデルの実装と比較検証
- モダンなWebアプリケーション開発
使用技術
プログラミング言語
Python 3.x
HTML5
CSS3
JavaScript
バックエンド
Flask 3.0.3
scikit-learn 1.7.1
pandas 2.3.1
NumPy 2.3.2
Selenium 4.34.2
webdriver-manager 4.0.2
Selenium: WebブラウザでのXPath要素取得によるデータ自動収集
webdriver-manager: ChromeDriverの自動管理
フロントエンド
Vanilla JavaScript
CSS Grid/Flexbox
CSS Animations
主な機能
1. 2つの予測モデルによる比較分析
モデルA: 確率モデル(ロジスティック回帰)
- 過去の出現パターンを統計的に分析
- 特徴量: 直近出現回数、累計出現数、経過回数など10種類
- クラス不均衡対策として class_weight="balanced" を適用
モデルB: RandomForestモデル
- アンサンブル学習による高精度予測
- 複雑なパターン・非線形関係の学習
- 特徴量重要度の可視化が可能
2. 自動データ収集機能
- SeleniumによるWebブラウザ自動操作
- XPathを使った要素取得による過去の抽選結果の自動収集
- みずほ銀行公式サイトから複数URLを巡回してデータ取得
- 取得データのCSV形式での保存
3. モダンなUI/UX
- グラデーション背景による視覚的に魅力的なデザイン
- ボールのバウンスアニメーション効果
- 予測計算中のローディング表示
- レスポンシブデザイン(PC・タブレット・スマートフォン対応)
4. 予測結果の視覚化
- 本数字6個とボーナス数字を直感的に表示
- 2つのモデルの予測結果を並列比較
- ボール形式での見やすい表示
システム構成
データフロー
公式サイト
↓ Selenium XPath取得
collect_loto6.py(データ収集)
↓ CSV出力
loto6_results.csv
↓ データ読込
予測モデルA・B(学習・推論)
↓
Flask(結果表示)
↓
index.html(ブラウザ表示)
工夫した点
1. 機械学習モデルの工夫
- クラス不均衡対策: 出現しない数字が圧倒的に多いため、class_weightで調整
- 特徴量エンジニアリング: 10種類の独自特徴量を設計
- 直近5回/10回の出現回数
- 累計出現回数
- 最終出現からの経過回数
- ボーナス数字としての出現傾向
- 時間トレンド
2. フォールバック機能
- scikit-learnが利用できない環境でもヒューリスティック手法で動作
- データ不足時の自動切り替え
3. UX/UIデザイン
- 非同期処理: 予測計算中もUIが固まらない設計
- 視覚フィードバック: ローディングアニメーションで待機時間を退屈させない
- 色分け: 本数字(金色)とボーナス数字(青色)を明確に区別
4. 保守性・拡張性
- 型ヒント(Type Hints)による可読性向上
- 関数の単一責任原則(SRP)に基づいた設計
- CSV形式の柔軟な対応(複数ヘッダー形式に対応)
特徴量設計の詳細
各数字(1~43)について以下の特徴量を抽出:
| 特徴量 | 説明 | 目的 |
|---|---|---|
recent5_cnt |
直近5回での出現回数 | 短期トレンド |
recent10_cnt |
直近10回での出現回数 | 中期トレンド |
cumulative_cnt |
累計出現回数 | 長期的な出現頻度 |
last_draw_flag |
前回出現したか | 連続出現傾向 |
recent5_bonus_cnt |
直近5回でボーナス出現 | ボーナス短期傾向 |
recent10_bonus_cnt |
直近10回でボーナス出現 | ボーナス中期傾向 |
cumulative_bonus_cnt |
ボーナス累計出現 | ボーナス長期傾向 |
gap_main |
最終出現からの経過回数 | Recency効果 |
gap_bonus |
ボーナス最終出現からの経過 | ボーナスRecency |
time_trend |
時間的トレンド(正規化) | 経年変化 |
技術的ハイライト
1. 複数モデルの並列実行
# 2つのモデルを同時に実行し結果を比較
prob_main, prob_bonus = predict_probabilities(draws_main, draws_bonus)
a_main_numbers, a_bonus_number = pick_numbers(prob_main, prob_bonus)
b_main_numbers, b_bonus_number = run_been_model("loto6_results.csv", time_to_predict=next_time)
2. 柔軟なCSV読み込み
# 複数の異なるヘッダー形式に対応
# 例: "数字1", "num_1", "当選番号1" など
3. エラーハンドリング
try:
# メインロジック
except Exception as e:
# フォールバック処理
context["error"] = f"エラー: {e}"
開発情報
開発形態
個人開発
役割
企画・設計・実装・テスト
開発時の注意事項
本プロジェクトは教育・学習目的で開発しました。開発および使用にあたり、以下の点に配慮しています。
データ収集における配慮
- 公開データのみを使用し、みずほ銀行公式サイトの利用規約を遵守
- 適切な待機時間(sleep)を設定し、サーバーへの負荷を最小限に抑制
- 過度なアクセスを避け、必要最小限のデータ取得に留める
- 取得したデータは個人的な学習目的にのみ使用
予測システムの位置づけ
- 機械学習技術の学習・検証を目的とした実験的プロジェクト
- 予測結果は統計的な分析に基づくものであり、確実性を保証するものではない
- 本システムを商用利用や実際の購入判断には使用していない
- ギャンブル依存症への配慮から、あくまで技術研究の範囲内で運用
倫理的配慮
- 本ツールはポートフォリオとしての技術紹介を目的としている
- オープンソースとして公開せず、悪用防止に配慮
- 教育目的の範囲を超えた利用を推奨しない立場を明示
謝辞
- データ提供: みずほ銀行ロト6公式サイト
- 機械学習ライブラリ: scikit-learn開発チーム
- Webフレームワーク: Flask開発チーム
- ブラウザ自動操作: Seleniumプロジェクト
デモ動画
実際の動作をご覧いただけます。予測モデルの動作や画面の使い方をわかりやすく紹介しています。