data-scientist
機械学習・統計モデリング・実験設計・予測分析など、データサイエンス全般を網羅するエキスパートスキル。MLアルゴリズムの選定、特徴量エンジニアリング、A/Bテストの設計、モデルの性能評価、予測パイプラインの構築などを行う際に活用してください。
description の原文を見る
> Expert data science covering machine learning, statistical modeling, experimentation, predictive analytics, and advanced analytics. Use when selecting ML algorithms, engineering features, designing A/B tests, evaluating model performance, or building predictive pipelines.
SKILL.md 本文
データサイエンティスト
エージェントはシニアデータサイエンティストとして機能し、アルゴリズムの選択、特徴エンジニアリング、実験設計、モデル評価を行い、予測を事業インパクトに変換します。
ワークフロー
- 問題を定義する -- ビジネス目標をML タスク(分類、回帰、ランキング、クラスタリング)として言い直す。主要な評価指標を定義する(例:不均衡な分類の場合は F1、回帰の場合は RMSE)。制約条件を文書化する(レイテンシ、解釈可能性、データ量)。
- データを収集・プロファイリングする -- ソースを特定し、行数、ヌル率、クラスバランス、特徴分布を確認する。モデリング前にデータ品質の問題にフラグを付ける。
- 特徴をエンジニアリングする -- 数値変換(log、ビニング)を作成し、カテゴリ変数をエンコード(one-hot、ターゲット、頻度)し、時間コンポーネントを抽出する(時間、曜日、循環 sin/cos)。重要度、相互情報量、RFE を用いてトップ特徴を選択する。
- モデルを選択・訓練する -- 以下のアルゴリズム選択マトリックスを使用する。単純なものから始めて(ロジスティック/線形回帰)、必要な場合にのみ複雑性を追加する(Random Forest、XGBoost、ニューラルネット)。クロスバリデーションを使用する。
- 厳密に評価する -- 分類指標(accuracy、precision、recall、F1、AUC-ROC)または回帰指標(MAE、RMSE、R-squared、MAPE)をレポートする。ベースラインと比較する。過学習(訓練と テスト の差分)をチェックする。
- 結果を伝える -- ビジネスインパクトを提示する(例:「モデルは偽陽性を 30% 削減し、年間 500K ドルを削減」)。デプロイメント経路または次の実験を推奨する。
アルゴリズム選択マトリックス
| シナリオ | 推奨アルゴリズム | アップグレードすべき場合 |
|---|---|---|
| 解釈可能性が必要 | ロジスティック/線形回帰 | ステークホルダー対応モデルは常にここから開始 |
| 小規模データ(< 10K 行) | Random Forest | 精度が不十分な場合は XGBoost に移行 |
| 中規模データ、高精度が必要 | XGBoost / LightGBM | 表形式データの標準的なワークホース |
| 大規模データ、複雑なパターン | ニューラルネットワーク | ツリー手法がプラトーに達したときのみ |
| 教師なし分類 | K-Means / DBSCAN | シルエットスコアを用いて k を検証 |
特徴エンジニアリングの例
数値変換:
import numpy as np, pandas as pd
def engineer_numerical(df: pd.DataFrame, col: str) -> pd.DataFrame:
return pd.DataFrame({
f'{col}_log': np.log1p(df[col]),
f'{col}_sqrt': np.sqrt(df[col].clip(lower=0)),
f'{col}_squared': df[col] ** 2,
f'{col}_binned': pd.cut(df[col], bins=5, labels=False),
})
循環エンコーディングを使用した時間ベースの特徴:
def engineer_time(df: pd.DataFrame, col: str) -> pd.DataFrame:
dt = pd.to_datetime(df[col])
return pd.DataFrame({
f'{col}_hour': dt.dt.hour,
f'{col}_dayofweek': dt.dt.dayofweek,
f'{col}_month': dt.dt.month,
f'{col}_is_weekend': dt.dt.dayofweek.isin([5, 6]).astype(int),
f'{col}_hour_sin': np.sin(2 * np.pi * dt.dt.hour / 24),
f'{col}_hour_cos': np.cos(2 * np.pi * dt.dt.hour / 24),
})
特徴選択(重要度ベース):
from sklearn.ensemble import RandomForestClassifier
def select_top_features(X, y, n=20):
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X, y)
importance = pd.Series(rf.feature_importances_, index=X.columns)
return importance.nlargest(n).index.tolist()
モデル評価
分類:
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
def evaluate_classifier(y_true, y_pred, y_proba=None) -> dict:
m = {
"accuracy": accuracy_score(y_true, y_pred),
"precision": precision_score(y_true, y_pred),
"recall": recall_score(y_true, y_pred),
"f1": f1_score(y_true, y_pred),
}
if y_proba is not None:
m["auc_roc"] = roc_auc_score(y_true, y_proba)
return m
回帰:
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import numpy as np
def evaluate_regressor(y_true, y_pred) -> dict:
return {
"mae": mean_absolute_error(y_true, y_pred),
"rmse": np.sqrt(mean_squared_error(y_true, y_pred)),
"r2": r2_score(y_true, y_pred),
}
A/B テスト設計と分析
サンプルサイズの計算:
from scipy import stats
import numpy as np
def required_sample_size(baseline_rate: float, mde: float, alpha: float = 0.05, power: float = 0.8) -> int:
"""Return required N per variant. mde is relative (e.g., 0.10 = 10% lift)."""
effect = baseline_rate * mde
z_a = stats.norm.ppf(1 - alpha / 2)
z_b = stats.norm.ppf(power)
p = baseline_rate
return int(np.ceil(2 * p * (1 - p) * (z_a + z_b) ** 2 / effect ** 2))
# Example: baseline 5% conversion, detect 10% relative lift
# >>> required_sample_size(0.05, 0.10) -> ~62,214 per variant
結果分析:
def analyze_ab(control: np.ndarray, treatment: np.ndarray, alpha: float = 0.05) -> dict:
"""Analyze A/B test with proportions z-test."""
n_c, n_t = len(control), len(treatment)
p_c, p_t = control.mean(), treatment.mean()
p_pool = (control.sum() + treatment.sum()) / (n_c + n_t)
se = np.sqrt(p_pool * (1 - p_pool) * (1/n_c + 1/n_t))
z = (p_t - p_c) / se
p_val = 2 * (1 - stats.norm.cdf(abs(z)))
return {
"control_rate": p_c, "treatment_rate": p_t,
"lift": (p_t - p_c) / p_c,
"p_value": p_val, "significant": p_val < alpha,
"ci_95": ((p_t - p_c) - 1.96 * se, (p_t - p_c) + 1.96 * se),
}
プロジェクトテンプレート
# Data Science Project: [Name]
## ビジネス目的 -- どのような問題を解決しているか?
## 成功指標 -- 主要:[指標]、二次:[指標]
## データ -- ソース、サイズ(行/特徴)、期間
## 方法論 -- 段階別ステップ
## 結果
| 指標 | ベースライン | モデル | 改善 |
|--------|----------|-------|-------------|
## ビジネスインパクト -- [定量的インパクト]
## 推奨事項 -- [次のアクション]
## 制限事項 -- [既知の注意点]
参考資料
references/ml_algorithms.md-- アルゴリズムの詳細解説references/feature_engineering.md-- 特徴エンジニアリングのパターンreferences/experimentation.md-- A/B テストガイドreferences/statistics.md-- 統計手法
スクリプト
python scripts/experiment_tracker.py log --name "xgb_v2" --params '{"lr":0.1,"depth":6}' --metrics '{"f1":0.87,"auc":0.92}'
python scripts/experiment_tracker.py list --sort-by f1 --top 5
python scripts/experiment_tracker.py compare --ids 1 3 5 --json
python scripts/hypothesis_tester.py ttest --file data.csv --col-a group_a --col-b group_b
python scripts/hypothesis_tester.py proportion --successes-a 120 --trials-a 1000 --successes-b 145 --trials-b 1000
python scripts/hypothesis_tester.py chi-square --file contingency.csv --json
python scripts/feature_selector.py --file dataset.csv --target churn --top 10
python scripts/feature_selector.py --file dataset.csv --target revenue --method correlation --json
ツール参照
| ツール | 目的 | キーフラグ |
|---|---|---|
experiment_tracker.py | ローカル JSON ファイルで実験をログ記録、一覧表示、比較する(パラメータ、指標、タグを含む) | log --name --params --metrics --tags、list --sort-by --top、compare --ids、--json |
hypothesis_tester.py | 統計テストを実行:Welch の t 検定、ペアの t 検定、比率 z 検定、カイ二乗独立性検定 | ttest --file --col-a --col-b [--paired]、proportion --successes-a --trials-a ...、chi-square --file、--json |
feature_selector.py | ターゲット列の複合スコア(分散、相関、相互情報量、ヌル率)によって特徴をランク付けする | --file <csv>、--target <col>、--top <n>、--method all/correlation/mutual_info、--json |
トラブルシューティング
| 問題 | 考えられる原因 | 解決方法 |
|---|---|---|
| モデルが過学習する(指標の訓練-テスト間に大きなギャップ) | 特徴が多すぎる、正則化が不十分、またはデータリークが発生している | feature_selector.py で特徴数を減らし、正則化を追加し、特徴エンジニアリングで時間リークを監査する |
| A/B テストで統計的に有意な結果だが効果サイズが小さい | 大規模なサンプルサイズにより、小さな差でも統計的に有意になる | p 値とともに効果サイズ(Cohen's d)を常にレポートする;実用的な有意性の閾値を使用する |
hypothesis_tester.py の p 値が scipy と異なる | このツールは正規分布/t 分布近似を使用する(標準ライブラリのみ) | 出版品質の分析については scipy.stats で検証する;このツールは高速な方向推定用に設計されている |
| 特徴重要度スコアが全て近いゼロ | ターゲット変数の分散が極めて低い、または特徴セットに予測力がない | ターゲット分布をチェックする;特徴エンジニアリングを検討するか、追加のデータソースを収集する |
experiment_tracker.py が実験 ID を順不同で表示する | 実験がシーケンシャルでない順序で記録された、またはログファイルが手動編集された | ID は自動インクリメントされます;意味のある順序付けは指標で --sort-by を使用してください |
| カイ二乗テストが「table must be at least 2x2」で失敗する | CSV 分割表の行が 2 未満または列が 2 未満である | CSV がヘッダー行と最低 2x2 の数値セルを持つことを確認する;形式が期待に一致することを確認する |
| クラス不均衡により accuracy が誤解を招く | Accuracy が多数クラスの予測で水増しされる | F1、precision-recall、または AUC-ROC を代わりに使用する;訓練中に SMOTE またはクラスウェイトを適用する |
成功の基準
- すべての ML プロジェクトはデプロイ前に Define-Collect-Engineer-Train-Evaluate-Communicate ワークフローに従う。
- 特徴選択は文書化される:
feature_selector.pyの出力は実験レコードとともに保存される。 - すべての実験は
experiment_tracker.pyでパラメータ、指標、説明的な名前を含めて追跡される。 - モデル評価レポートには最低 3 つの指標(例:F1、AUC-ROC、precision)とベースラインとの比較が含まれる。
- A/B テストはデータ収集前に仮説、サンプルサイズ計算、主要指標を事前登録する。
- 統計テストは p 値だけでなく、効果サイズと信頼区間をレポートする。
- ビジネスインパクトはドル単位またはユーザー指標単位で定量化される(例:「偽陽性を 30% 削減し、年間 500K ドルを削減」)。
スコープと制限事項
スコープ内: 機械学習アルゴリズム選択、特徴エンジニアリング、モデル訓練と評価、A/B テスト設計と分析、統計仮説検定、実験追跡、ステークホルダーへの結果伝達。
スコープ外: 本番へのモデルデプロイメント(ml-ops-engineer を参照)、データパイプラインインフラストラクチャ、ダッシュボード開発、リアルタイムサービング アーキテクチャ。
制限事項: Python ツールは Python 標準ライブラリのみを使用します。hypothesis_tester.py は中程度のサンプルサイズに対して正確ですが、極端なケース(非常に小さい n、極度のスキュー)については scipy で検証すべき正規分布および t 分布近似を使用します。feature_selector.py はビニング離散化を使用した近似相互情報量を計算します。高精度の特徴選択については、sklearn の mutual_info_classif または順列重要度を使用します。すべてのツールはローカルファイルを処理し、MLflow、W&B、または他の追跡プラットフォームと統合されません。
統合ポイント
- MLOps エンジニア(
data-analytics/ml-ops-engineer):訓練済みモデルは本番デプロイメント、監視、レジストリ管理のために引き継がれます。 - データアナリスト(
data-analytics/data-analyst):予測モデリングが必要な複雑な分析質問はアナリストからデータサイエンティストにエスカレートされます。 - Analytics エンジニア(
data-analytics/analytics-engineer):特徴エンジニアリングパイプラインは mart モデルを上流データソースとして依存する場合があります。 - プロダクトチーム(
product-team/):実験結果は製品決定に情報を提供します;A/B テスト設計はプロダクトマネージャーと共同で作成されます。 - エンジニアリング(
engineering/senior-ml-engineer):アルゴリズム実装の詳細とモデルアーキテクチャの決定がデータサイエンスと ML エンジニアリングを橋渡しします。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- borghei
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/borghei/claude-skills / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。