Repository navigation
fix: 再監査の指摘(区間の上限張り付き・FRE の修正遅れ・ホールドアウト・診断・★評価・最適化手法・ln ψ)に対応 - #7
Merged
Merged
Conversation
- OptimizerFactory.Create/AutoOptimize/MultiStartOptimize にシードを渡す口を追加(LHS の開始点も含む) - ModelFitter は推定ごとのシードを基準シード・モデル名・データの内容から作る(並列の再推定でも実行順によらない) - --seed を追加。未指定なら設定の Bootstrap.RandomSeed、それもなければ固定値を使い、既定で再現できるようにする Co-Authored-By: Claude Opus 5.5 <[email protected]>
- CMA-ES: IPOP のやり直し(λ を倍にしてランダムな点から再探索)を追加し、2回同じ値に収束したら終える。 Converged は TolX/TolFun で止まった探索が最良解を出したときだけ true にする(停滞は収束ではなくやり直しのきっかけ)。 境界上の初期点でシグモイドが飽和しないよう u を ±4 に丸め、共分散の分解に失敗したら単位行列に戻さずやり直す。 収束の遅い GO データで 200 回中 9 回失敗していたのが 0 回に - GWO: 最良値の停滞で打ち切らず、α・β・δ がそろったときだけ収束とする。 群れは終盤まで縮みきらず精度が低いため、α から Nelder-Mead で仕上げる(SSE で 30/30 回最適値に届かなかった) - 打ち切り時に Iterations が 1 少なくなる問題を修正 Co-Authored-By: Claude Opus 5.5 <[email protected]>
- InflectionSModel と変化点版のパラメータを ψ ∈ [0,1000] から lnψ ∈ [-10,20] に変更(初期値 0)。 ψ≈3.6万(変曲点 30 日)の合成データで 50/50 回上限に張り付いていたのが 0 回に - 自然な境界の判定をモデル側の IsNaturalBound に移し、ln ψ の下限(実質的に指数型)は注意しない - 変曲点 t* = lnψ/b を派生量(GetDerivedQuantities)として CLI・レポート・Excel に表示 - Fisher 情報行列はモデルが指定する座標(ψ)で求め、ヤコビアンで ln ψ の共分散に戻す (ln ψ が下限付近だと尤度がほぼ平らでヘッセ行列が特異になり、モデル平均化の分散が NaN になっていた) - 遅延S字型+変化点のコメントを修正(τ で m(t) は連続だが検出強度は h₁(τ) から h₂(τ) へ跳ぶ) - Template.xlsx のモデル一覧を更新 Co-Authored-By: Claude Opus 5.5 <[email protected]>
- m_c(t) = ∫₀ᵗ η(s)·m_d'(s)·G(t-s) ds、G は平均 D 日の指数分布(D=0 で以前の m_c = η·m_d) - 定数FRE・学習FRE・FRE+変化点にパラメータ D(平均修正遅れ、[0, 観測日数]、0 は自然な境界)を追加。 いずれも閉形式で計算する(学習FRE の Simpson 積分も置き換え)。ロジスティックFRF は η·m_d の形ではないため変更なし - 真値 a=200, b=0.04、40 日のバグ単位のシミュレーションで、3 日遅れ a +11%・b -16%、7 日遅れ a +31%・b -36% だった偏りが a ±1%・b +5% 程度に。遅れのないデータでは D ≈ 0 で、発見数だけの GO と同じ a になる Co-Authored-By: Claude Opus 5.5 <[email protected]>
- ParametricBootstrap が反復ごとに a の上限張り付き(合成データの探索範囲)を記録する。 張り付いた割合が上側の裾 1-qHigh を超えると、総数・残りバグ数・収束日(と将来の m(t)・累積の上限)を「≥」で表示し、 最終的な警告一覧にも載せる。張り付いた反復は除外しない(除くと区間が不当に狭くなる) 例: 観測最大値 238・推定 624 件のデータで再推定の 1 割強が上限 1190 前後に張り付き、97.5% 点は探索範囲の値だった - 区間の表示を IntervalFormatter.EstimateLine にまとめる - TEF モデルでは工数も工数の尤度(正規分布)に従って再生成し、工数を差し替えた複製で推定し直す (共有のモデルを並列に書き換えない)。以前は工数を固定したため工数関数のパラメータがほとんど動かなかった - 有限工数の TEF モデルの m(∞) の表示名を「推定総工数で見つかるバグ数」に(TotalBugsLabel) Co-Authored-By: Claude Opus 5.5 <[email protected]>
- 予測分布を Poisson(Λ)、ln Λ ~ N(ln Δ̂, s²) の混合とし(s は訓練区間の Fisher 情報行列とデルタ法、τ は固定)、 実測の期間発見数が 95% 予測区間の外なら警告する。区間は CLI・レポート・Excel に表示する - 相対誤差 30%・60% の固定しきい値による警告を廃止。正しいモデル(GO データに GO)で 末尾 5 日 60%・10 日 41% に出ていた警告が 3〜4% に。遅延S字データに GO を当てはめると 10 日で 72% を区間外と判定 - 他モデルとの比較・AIC 最良モデルとの比較の警告は、そのモデル自身が区間外のときだけ出す - Fisher 情報行列の計算で一部のパラメータ(変化点 τ)を固定できるようにする Co-Authored-By: Claude Opus 5.5 <[email protected]>
- 自己相関検定をランダム化分位残差に対して行い、Ljung-Box 検定だけで判定する(DW・各ラグの ACF は参考表示)。 以前は Pearson 残差に DW 帯・Ljung-Box・10 ラグの個別判定の OR をとり、正しいモデルでも 28〜32% を自己相関ありとしていた → 6.5〜9% - スコアの系統的パターン・外れ値(|r|>3)・歪度・尖度をランダム化分位残差で判定し、歪度・尖度は標準誤差の何倍かで減点する (Pearson 残差では正しいモデルでも |歪度|>0.5 が 5〜8 割) - χ² 検定の自由度を「ビン数 − 発見数の m(t) に効くパラメータ数」にし(FRE の η・D を数えない)、 自由度が残らなければ検定できないとする(以前は Max(1, B−k) で自由度 1 をでっち上げていた) - ブートストラップで較正していない KS・CvM(FRE モデルなど)は参考表示にとどめ、適合性の判定に使わない - README の検定の大きさ・検出力の表を 1000 データで測り直す(χ² の正しいモデルでの棄却率は 3.0% ではなく 6.3%) Co-Authored-By: Claude Opus 5.5 <[email protected]>
- 信頼下限 = 累積発見数 / (累積発見数 + 今後発見される件数の予測区間の上限)。点推定の発見率も並べて表示する - 予測区間は --ci/--pi のブートストラップがあればその予測区間、なければ Fisher 情報行列(τ は固定)と Poisson・対数正規の混合で求める(安いので常に計算)。FRE・TEF・SSE では点推定で判定し、その旨を表示 - 今後発見される件数の上限が探索範囲で決まっている(≥)場合と、安定性分析が「不安定」の場合は ☆☆☆ 止まり - 総数 a の信頼区間の上限で割らないのは、a が総数の Poisson 分布の平均で、ほぼ全件発見済みでも幅が √a 程度残るため (真の発見率 99.97% のデータで信頼下限が 86% 程度になり ★ が付かなかった) - 真の発見率 83.5%(a=60)のデータ 100 セットで、点推定では 24 セットに ★☆☆ 以上が付いていたのが 0 に。 真の発見率 99.97%(a=150)では 96 セットが ★★★ Co-Authored-By: Claude Opus 5.5 <[email protected]>
--seed、CMA-ES の IPOP・GWO の仕上げ、変曲S字型の ln ψ、FRE の修正遅れ D、区間の「≥」表示、 TEF の工数の再生成と表示名、ホールドアウトの予測区間による判定、統計診断の変更、★ 評価の信頼下限による判定と出力例 Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
zredjet
added a commit
that referenced
this pull request
Sep 25, 2026
fix: PR #7 のコードレビューで見つかった問題を修正
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
前回の修正後の再監査で出た指摘(中程度 6 件・軽微 7 件)に対応します。項目ごとに 1 コミットで、各項目は「今のコードで失敗するテスト → 修正」で確認しました。テストは 148 → 192 件で、すべて通っています。
変更内容
--seedを追加し、推定ごとにシードを決定的に決める計画から変えた点
利用者から見える変化
ψ→lnψ、FRE モデルにパラメータDが加わります。テスト
dotnet test tests/BugConvergenceTool.Tests: 192 件すべて成功--ci --pi -d --holdout 5 --seed 1を 2 回実行し、出力が一致することを確認--fre/--tef/--change-point/--optimizer cmaesを実行し、エラーがないことを確認🤖 Generated with Claude Code