labkasei/symbolic-regression
0
シンボリック回帰アプリ
CSVデータをアップロードし、目的変数と説明変数を選択するだけで、説明変数から目的変数を予測する人間が読める数式を自動発見するWebアプリケーションです。
概要
このアプリは、単に予測精度の高いブラックボックスモデルを作ることが目的ではありません。最終成果物として人間が読める数式を出力することが最重要です。
主な機能
- CSVファイルのアップロードとデータ確認
- 目的変数・説明変数の選択
- シンボリック回帰による数式の自動探索
- 数式の通常表記・LaTeX表記・Python関数形式での出力
- 精度指標の表示(R², RMSE, MAE, MAPE, sMAPE, AIC/BIC等)
- 候補モデルの比較(Pareto frontier)
- 結果のエクスポート(テキスト, LaTeX, Python, CSV, Markdown, HTML, ZIP)
セットアップ
必要要件
- Python 3.11 以上
- pip
インストール
# リポジトリをクローンまたはダウンロード
cd symbolic_regression_app
# 依存パッケージのインストール
pip install -r requirements.txtオプション: PySR のインストール
PySRはJulia言語に依存するため、追加のセットアップが必要です:
pip install pysr
python -c "import pysr; pysr.install()"PySRが利用できない場合は、自動的にgplearnまたはフォールバック方式が使用されます。
起動方法
streamlit run app.pyブラウザで http://localhost:8501 にアクセスしてください。
使い方
- データアップロード: CSVファイルをアップロード(またはサンプルデータを使用)
- 変数選択: 目的変数(y)を1つ、説明変数(X)を複数選択
- 探索条件設定: エンジン、最大複雑度、探索時間等を設定
- モデル探索開始: ボタンをクリックして探索を実行
- 結果確認: 数式、精度指標、プロットを確認
- エクスポート: 必要な形式でダウンロード
探索エンジン
以下の3つのエンジンを優先順位に従って使用します:
ファイル構成
symbolic_regression_app/
├── app.py # Streamlit UIアプリケーション
├── symbolic_engine.py # シンボリック回帰エンジン
├── preprocessing.py # データ前処理モジュール
├── metrics.py # 精度指標計算モジュール
├── plotting.py # 可視化モジュール
├── export_utils.py # エクスポートユーティリティ
├── requirements.txt # 依存パッケージ
├── README.md # このファイル
├── sample_data.csv # サンプルデータ
├── generate_sample_data.py # サンプルデータ生成スクリプト
└── tests/
├── __init__.py
└── test_smoke.py # スモークテストサンプルデータ
sample_data.csv は以下の関係式で生成されたデータです:
y = 3 * x1^2 + 2 * x2 / (abs(x3) + 1) - 0.5 * log(abs(x4) + 1) + noiseテスト
pytest tests/ -v精度指標
以下の精度指標を表示します:
- Train R² / Test R² / Adjusted R²
- RMSE / MAE / MAPE / sMAPE
- Median Absolute Error
- 交差検証 R² / RMSE(平均・標準偏差)
- 数式の複雑度・項数
- 実行時間
- AIC / BIC(参考値)
過学習対策
- Train/Test Split
- K-Fold Cross Validation
- Random Seed の固定
- 目的変数の説明変数混入チェック
- 欠損値・無限大値の処理
- Complexity Penalty
- 最大式サイズ制限
- 最大探索時間制限
- Pareto Frontier による精度-複雑さトレードオフの可視化
既知の制約
- PySRはJulia環境のセットアップが必要で、環境によっては動作しない場合があります
- gplearnは大規模データでは計算時間が長くなる場合があります
- フォールバック方式は線形結合に基づくため、非線形な交互作用の発見に限界があります
- AIC/BICはシンボリック回帰ではパラメータ数の定義が難しいため、参考値です
今後改善できる点
- PySRの自動インストール機能
- より多様な演算子のサポート
- 並列処理による高速化
- モデルの保存・読み込み機能
- 時系列データへの対応
- カテゴリ変数の自動エンコーディング
- インタラクティブなプロット(Plotly)の強化
- モデルの解釈性スコアの追加
ライセンス
MIT License
