はじめに
AIエンジニアリングの設計思想はここ数年で大きく進化してきました。まずプロンプトとコンテキストウィンドウの設計を最適化するコンテキストエンジニアリングが注目され、次にツールや外部システムとの接続設計を体系化するハーネスエンジニアリングが登場しました。そして現在注目されているのがループエンジニアリングです。AIエージェントが目標に向かって自律的に試行と改善を繰り返すループ構造を設計する技術です。
本記事では、Claude Codeの /goal コマンドを使ったゴール型ループを実装し、Kaggle Titanicコンペで実際にスコアを改善できるかを検証します。
ループエンジニアリングとは
ループエンジニアリングとは、AIエージェントが目標に向かって試行と改善を繰り返すループ構造を設計する技術です。
ループを持つエージェントは以下のサイクルを繰り返します。
- 現状を観察する
- 次の行動を決定する
- 行動を実行する
- 結果を評価して次へ進む
ループ設計において重要な要素は次の3つです。
停止条件:ループをいつ終えるかを明確に定義します。条件が曖昧だと無限ループに陥ります。
コンテキスト管理:繰り返しの中で何を記憶し何を引き継ぐかを設計します。
ハーネス設計:外部ツールや状態ファイルとの連携方法を定めます。
代表的なループ種別としては、目標達成まで繰り返すゴール型、一定間隔で繰り返す時間型、イベントをトリガーにするイベント型などがあります。今回はClaude Codeの /goal コマンドを使ったゴール型ループを実装しました。
実験内容
実験概要
Kaggle Titanic生存予測コンペを題材に、ループ構造の違いが精度に与える影響を検証しました。具体的には、外側ループのみの単層構造と、内側ループを加えた二層構造を比較します。TitanicコンペはKaggle入門として最も有名なコンペであり、public leaderboardには数万件の提出が集まっています。スコア0.80超えは上位25%程度に相当する競争力のある水準であり、これを共通の目標として両方の実験を実施しました。
使用データ
Kaggle公式のTitanicデータセットを使用しました。訓練データは891件、テストデータは418件です。目的変数はSurvivedの二値分類です。
ループのアーキテクチャ
二層構造のループを設計しました。
外側ループ:1回の繰り返しが1回のKaggle提出に対応します。提出数がそのままループ回数になります。
内側ループ:複数の機械学習手法を試し、交差検証スコアが改善するまで繰り返します。改善が確認できた場合のみKaggleに提出し、最低3手法を試しても改善がなければ最良のものを提出します。
| 観点 | 内側ループなし | 内側ループあり |
|---|---|---|
| 提出の基準 | 任意のモデルをそのまま提出 | CVが改善した場合のみ提出 |
| 1提出あたりの試行数 | 1手法 | 複数手法を探索 |
| 提出枠の効率 | 低い | 高い |
| 知識の蓄積 | なし | experiment_log.mdに記録して次回へ引き継ぐ |
内側ループがなければ、改善の見込みのないモデルを提出し続けることになります。今回の実験では1回の外側ループで平均5手法以上を試し、交差検証で改善が確認できたものだけを提出しました。
ループの設定
- 停止条件:Kaggle scoreが0.80を超えるか、提出回数が8回に達する
- スコア評価:5分割交差検証の精度
- 実行ツール:Claude Code /goal コマンド
- 状態管理:experiment_log.mdに提出記録と教訓を蓄積
結果
実験の比較
二層構造のループを設計する前後で、以下の違いが生まれました。
| 観点 | 単層ループ実験 | 二層ループ実験 |
|---|---|---|
| ループ構造 | 外側ループのみ | 外側ループ + 内側ループ |
| 1提出あたりの探索数 | 1手法 | 平均5手法以上 |
| 提出数 | 9回 | 5回 |
| 最高Kaggle score | 0.78229 | 0.81339 |
| 目標達成 | 未達成 | 達成 |
単層ループ実験の結果
内側ループを持たない単純なループ構造では、1回の繰り返しで1手法を試してそのままKaggleに提出していました。9回提出しても最高スコアは0.78229にとどまり、目標の0.80を超えることができませんでした。
| 提出 | 採用手法 | Kaggle |
|---|---|---|
| 1 | RFアンサンブル | 0.77272 |
| 2 | RF+GB+LRアンサンブル | 0.77272 |
| 3 | GB + ドメイン特徴量 | 0.76076 |
| 4 | LogisticRegression | 0.76794 |
| 5 | RF+SVC+LRアンサンブル | 0.78229 |
| 6 | LGB+RF+LR + 追加特徴量 | 0.76315 |
| 7 | RF+SVC+LR + TicketGroupSize | 0.78229 |
| 8 | RF+SVC+LR + TicketGroupSize | 0.78229 |
| 9 | SVC単体 | 0.77990 |
二層ループ実験の結果
内側ループを追加したことで、1回の外側ループで複数手法を探索し、交差検証で改善が確認できた場合のみ提出するようになりました。5回の提出で目標を達成しました。
| 提出 | 採用手法 | CV | Kaggle |
|---|---|---|---|
| 1 | RF+SVC+LR アンサンブル | 0.8339 | 0.78229 |
| 2 | TicketGroupSize追加 | 0.8339 | 0.78229 |
| 3 | ドメイン特徴量追加 | 0.8350 | 0.77511 |
| 4 | ベースライン再提出 | 0.8339 | 0.78229 |
| 5 | ファミリー生存率追加 | 0.8462 | 0.81339 |
5回目の提出で目標を達成し、ループを停止しました。決定的だったのはファミリー生存率特徴量の導入です。同姓の乗客の生存率をLeave-One-Out方式でターゲットエンコーディングしたことで、CVが0.8339から0.8462、Kaggle scoreが0.78229から0.81339へ大幅に改善しました。なお、ドメイン特徴量を追加した3回目はCVが改善したにもかかわらずKaggle scoreが悪化しており、CVの微増が汎化性能の向上を意味しないことも確認できます。
まとめ
今回の実験を通じて、ループ構造によりエージェントが自律的に複数の手法を試し、目標スコアを達成できることを確認しました。しかしスコア改善の鍵は、ループを回すこと自体よりも、ハーネスの設計にありました。
内側ループによるCVゲーティング、experiment_log.mdによる状態の引き継ぎ、そして明確な停止条件、この三つが組み合わさって初めて、エージェントは効率よく探索し学習することができます。ハーネスが機能しなければ、ループはただの繰り返しに過ぎません。
AIエージェントの活用が広がる中で、ループをどう設計するかと同じくらい、ループを支えるハーネスをどう設計するかが重要です。ループエンジニアリングとハーネスエンジニアリングは切り離せない技術です。
実装コード
本記事で使用したコードはGitHubで公開しています。

