【要約】「やらなかった処理」こそログに残す — 反事実ログ運用 3 ヶ月の学び [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
自動売買システムの開発者が、システムの「意思決定の質」を測定できない問題に直面した。通常の実行ログは、実際に実行された処理の結果のみを記録する。そのため、以下の課題が生じる。
- ・スキップした判断が正しかったのか、過剰に保守的だったのかが不明。
- ・スキップによって防げた損失と、逃した利益が観測不能。
- ・ルールの追加や削除が、経験や印象に基づいた主観的な判断に依存してしまう。
// Approach
開発者は、実行されなかった分岐を後から評価する「反事実ログ」の仕組みを導入した。判断時点の情報を保存し、後続のバッチ処理で結果を追記する3ステップの構造を採用している。
- ・判断時点でのスナップショット取得: なぜスキップしたかの理由と、その時の入力値を記録する。
- ・観測対象の宣言: 評価に必要な外部データ(URLや期限など)をあらかじめ定義する。
- ・遅延評価: 一定時間後にバッチを実行し、実際の値を取得して結果を追記する。
// Result
運用開始から3ヶ月で、意思決定の寄与度を定量的に評価できるようになった。自動売買の例では、スキップによる「損失防御」と「機会損失」の差分を算出し、ルールの純寄与を可視化した。
- ・過剰防御の状態を数値で把握し、感情に頼らないルール修正が可能になった。
- ・Circuit BreakerやFeature Flagなど、他のFail-fastな仕組みへの応用可能性が明確になった。
- ・運用判断の根拠が「印象」から「数字」へと変化した。
Senior Engineer Insight
> Observabilityの概念を「実行」から「意思決定」へと拡張する優れたアプローチだ。特に、分散システムにおけるFail-fast設計の妥当性検証において、この手法は極めて高い価値を持つ。ただし、実装には「評価用データの整合性確保」と「評価ロジックの不変性」の担保が不可欠だ。副作用(Side Effect)によるバイアスを考慮する設計も、実戦的な視点として高く評価できる。