はい、まだやってます。
というのも、ここの所のコンデションは「爆発」と言う感じからは程遠く、更には、遂に東北地方まで梅雨入りしてしまいました。
そんな今こそ、詳細観測を行い予測を可能にし、雨の止んだ短時間に運用出来る環境構築をすべき、とも思うわけです。
プログラム自体はpythonなのですが、相当巨大化し、ジェンガ状態も否めなくも無いです。
一方、同じ様に最近流行りのAIで、このプログラムが作れるか?ものは試しにやってみましたが、動作する事はもちろん、再現は出来ませんでした。
簡単に言えば、AIは“表面的な構造”は真似できますが、本プログラム(以降CBM2)のように
・観測ノイズの扱い
・lag依存の安定性評価
・符号保存や寄与度の整合性
などの“運用ロジック”までは再現できませんし、学習機能や、実際運用した時との一致性など、「実際にやっている人だからこそ」の部分には手が出せず、理論ベースに終始してしまいます。
ソースコード作成をAIに頼るには相当入れ知恵が必要ですし、逆に検証ロバスト性を持たせたソースコードを作らせるのは、まだ無理そうです。

═══════════════════════════
①やさしい解説
═══════════════════════════
Ver10.8J アップデート
【バージョンアップの流れ】
Ver10.6J 予測の「中身」を検証できるようにした
↓
Ver10.7J スマホ(Pydroid3)で見やすい画面に整えた
↓
Ver10.8J Esの「動き方」を観測できるようにした、計算ミスと表示の不具合を直した
【何が変わったか】
このソースコードは、NICTが公開している電離層の観測データから「27MHzのEsがいつ開けそうか」を予測する自作ツールです。Ver10.8Jでは、当たり外れの精度そのものより、Esがどう動いていて、どれくらい安定しているかを見る力を強化しました。
・Esの「ゆれ」を見るようになりました
同じ強さのEsでも、安定して出ているのか、不安定にバラついているのかを区別できます。
・Esの「加速・減速」を見るようになりました
強くなる速度が増えているか減っているかを見て、急に伸びる前兆や、急に潰れる前兆を捉えやすくしました。
・Esが北上中か南下中かを、画像なしで推定できるようになりました
沖縄・山川・国分寺・稚内の4局の強さのバランスから、Es全体の動きを計算します。
・「今、何が予測を支配しているか」のランキングが正しくなりました
・ログがこまめに保存されるようになりました
今までは終了時にまとめて保存していたため、アプリが急に落ちるとその回の記録が消えていました。今は毎回保存するので、急に終了しても直前までのデータが残ります(Pydroid3に限らずどの環境でも)。
・内部の計算スケールのバグを修正しました
学習した重みと、実際に予測へ使うときの数値の「ものさし」がズレていた箇所がありました。
・Pydroid3でのカラー表示を改善しました
今までは無条件に色なし表示でしたが、自動で色表示を試みるようにしました。崩れて見える場合は次回起動時に--no-colorを指定すれば元の表示に戻せます。
要するに「当たるか外れるか」だけでなく、今のEsはどんな性格かを見えるようにしたバージョンです。
═══════════════════════════
②詳細仕様を知りたい方向け
═══════════════════════════
Ver10.8J 変更仕様まとめ
【バージョンの位置づけ】
Ver10.6J
学習器の健全化+説明可能性の整備
(単純相関→Ridge回帰へ刷新、VIF監視で多重共線性を監視、実効寄与・偏相関レポートで「なぜその結果か」を追跡可能に)
↓
Ver10.7J
運用面の改善(Pydroid3向け表示UI)
※モデルロジックは不変、表示層のみの変更
↓
Ver10.8J
観測量の拡張+学習〜推論の整合性修正
Es強度予測器からEs空間構造解析器への移行。QSO実績等の人間系データへの依存は増やさず、NICT観測データのみからの観測量拡張に振った。
【主な変更点】
・符号保存
sign_fof2/dfof2/hmf2/dhmf2/m3000f2を追加。abs(raw_coef)のみだった重みに方向情報を付加。empirical_probability()内のハードコード符号は今回は未置換。
・lag_stability_score
1/std(future15/30/45/60/90のR²)。閾値未満は全重み0として棄却し、単発lag一致による過学習を抑制。
・fxes_std_60/d2_eff
時刻ベースrolling std(60分窓)とEs加速度(d_effの一階差分)を追加。現状は観測・記録のみ。
・es_centroid_lat/d_centroid_lat
当初案のlat_gradient(隣接局一次近似)は4局のみでノイズが大きく不採用。fxEs加重重心緯度を公開する形に変更。MSTID画像非依存で移動推定可能。
・effective_feature_ranking
旧feature_ranking_history.csv(固定設計重み込み)に代わり、瞬間値×重みの実効寄与を直近サイクル集計して再構成。
・セッションログの堅牢化
終了時一括保存からサイクル毎の全バッファ上書き保存(mode='w')に変更。プラットフォーム分岐なし、全環境共通。
・標準化スケール不整合バグの修正(重要)
学習側はStandardScalerの実データ平均・標準偏差で標準化していたが、推論側は手作業の決め打ち正規化(例:hmF2を「250中心・100で割る」)を使っており不整合だった。加えてscalerをlagループ内で使い回す副次バグもあり、採用された最良lagと無関係な統計が残っていた。ベストlag時点のscaler統計をprofileに保存し、共通関数std_z()(z値を±3.0でクリップ)で学習時と同じ標準化を再現するよう修正。実測(合成データ)ではhmF2の実標準偏差が約9.8で、旧実装の決め打ち値(100)とは約10倍のスケール差があった。
・Pydroid3カラー表示のバグ修正
resolve_use_color()がAndroid判定時にuse_colorを問答無用でFalse確定していた上、color_or_symbol_state()もandroid=True時にuse_colorを一切参照しておらず、--colorを強制指定しても色が付かない二重のバグがあった。TERM環境変数によるヒューリスティック(supports_ansi_color())で自動的にカラー表示を試み、崩れる場合は--no-colorで手動復帰する設計に修正。あわせてcolor_by_state()の色判定が記号文字列への部分一致だと「強い開通」「弱い兆候」を拾えず無色になる不具合も発見・修正(判定は元のフルテキストで行い、結果を記号に適用)。