session保存格式結構如下:
84171-0j50xl0z9ulr.png

json格式化如下:
96351-8qclkt3iwr.png

為什麼選擇 JSONL?

Claude Code 沒有使用資料庫,而是選擇了最簡單的格式:每個 session 一個 .jsonl 檔案,每行一條 JSON 訊息。

比較面向 JSONL 格式 關聯式資料庫
讀取方式 任何文字編輯器、cat 需要 DB 驅動
追加速度 極快(append-only) 需要 transaction
查詢能力 低(需全掃) 高(SQL)
跨機器遷移 複製檔案即可 需要 dump/restore
故障恢復 行級別,單行壞掉不影響其他行 依賴 transaction log
版本控制 可用 git 追蹤 不適合

結論:AI 對話是只增不改、需要人類可讀、不需要複雜查詢的應用場景,所以JSONL 是最合適的選擇。

- 閱讀剩餘部分 -

先問個問題,彩球從 38 個號碼中抽 6 個,理論上每組會出現「連號對」(兩個相鄰的數字)的機率是多少,平均每期會出現幾對連號?0.5?1?2?

很多人會猜「應該很少,大概 0.2 對左右」。理由很直觀:38 個選 6 個,平均每個號碼之間應該隔 38/6 ≈ 6 格,連號感覺很稀有。

但這個直覺是錯的。連號其實非常常見,平均每期會出現超過 0.8 對。


40652-pxkr28wyeok.png

- 閱讀剩餘部分 -

彩球有 38 個號碼,每期開 6 顆球。任何一個號碼平均 6/38 ≈ 15.8% 的機率出現。換算過來——

平均每 6.33 期,每個號碼會出現一次。

這個「6.33」也叫做「期望間距」。然而實際每個號碼的間距會落在哪裡?透過圖形可以看到

28739-sryirmg13x.png

圖裡藍色長條是「實際間距分布」,紅線是「幾何分布的理論曲線」。

  • 最高峰落在「間距 = 1」(也就是下一期就再出現)
  • 隨著間距增加,比例呈指數下降
  • 右偏的指數衰減,這是幾何分布的特徵。

理論告訴你最常見的間距是 1 期(下一期就再出現),不是 6 期。

直覺以為「平均 6.33 期」表示「大多落在 6 附近」是錯的——平均值會被少數的長間距(20、30 期)拉高,但中位數和眾數都遠小於平均值


公式

幾何分布 PMF

$$P(X = k) = p \cdot (1 - p)^{k - 1}, \quad k = 1, 2, 3, \ldots$$

期望間距

$$E[X] = \frac{1}{p} = \frac{38}{6} \approx 6.33$$

Kolmogorov-Smirnov 檢定(用來檢驗實際間距是否符合幾何分布):

$$D = \sup_x \left| F_n(x) - F(x) \right|$$

符號 意思
$p$ 每期出現機率(= 6/38)
$X$ 兩次出現之間的間距(期數)
$F_n(x)$ 實際數據的經驗 CDF
$F(x)$ 幾何分布的理論 CDF
$D$ 兩個 CDF 的最大差距

K-S 檢定的判定跟 Chi² 類似:p-value > 0.05 表示「實際間距和理論幾何分布沒有顯著差異」。


最終的執行結果

(py3.10) G:\Dev\Program\Lottery>python blog\02-gap-distribution.py 

========== 彩球 間距分析 ==========
主號碼範圍      : 1-38
理論期望間距    : 6.3333 (= main_max / main_count = 38/6)
實際平均間距    : 6.3128
間距樣本數      : 11308

K-S 檢定(vs 幾何分布 p=0.1579)
  D 統計量      = 0.1579
  p-value       = 0.000000
  判定          : 拒絕「符合幾何分布」假設

========== 樂彩 間距分析 ==========
主號碼範圍      : 1-49
理論期望間距    : 8.1667 (= main_max / main_count = 49/6)
實際平均間距    : 8.1297
間距樣本數      : 12641

K-S 檢定(vs 幾何分布 p=0.1224)
  D 統計量      = 0.1224
  p-value       = 0.000000
  判定          : 拒絕「符合幾何分布」假設

結論

一句話結論:號碼間距服從幾何分布——最常見的間距是 1 期,不是 6 期。長間距是長尾事件,本來就會偶爾出現。

這并不能拿來預測「冷號該回補」,這是賭徒謬誤的核心。幾何分布有一個關鍵特性叫無記憶性

$$P(X > s + t \mid X > s) = P(X > t)$$

意思是「已經等了 $s$ 期不出現,再等 $t$ 期才出現的機率,跟一開始等 $t$ 期出現的機率一樣」。

一個號碼已經 30 期沒出現,下一期出現的機率還是 6/38 ≈ 15.8%。
歷史不會「累積債務」,未來不會「強制償還」。

幾何分布是少數有「無記憶性」的分布之一(另一個是連續版的指數分布)。這個性質正是「每期獨立」的數學保證。

分析間距的用途:

  • 檢驗隨機性:如果實際分布大幅偏離幾何分布,就代表「每期獨立」假設被破壞了,需要進一步調查
  • 建立直覺:理解為什麼「6 期沒出現」不算稀奇(理論預測有約 36% 的間距 ≥ 6 期)
  • 設計推薦策略的對照組:任何「冷號回補」策略的回測,理論基準就是這條幾何曲線

系列 B 第二篇:量化「兩個年份之間城市變了多少」有兩條主流路徑——SSIM 著重結構相似度,ResNet 著重語義變化。本篇拆解兩者各自的擅長領域,並以實際數據示範何時應同時採用兩個指標。


一、為何需要「跨年變化偵測」

前一篇介紹的三個指標(邊緣密度、建築覆蓋率、紋理熵)屬於單幀指標——每張影像獨立計算一個數值。

然而研究城市發展時,真正想回答的問題是「這個地點從 2018 到 2025 發生了多大的變化」。最直覺的做法是差分(metric_2025 - metric_2018),但此方式有一個根本限制:

兩張影像的 edge_density 同樣是 0.18,差值為零——但實際上整片區域可能已完全重建,只是新舊建築的邊緣密度恰好相同。

差分丟失了「像素級的對應關係」。需要的是直接比對兩張影像本身的方法。

主流有兩條路徑:

方法 偵測對象 計算成本 可解釋性
SSIM 結構相似度(像素對應) 低(CPU 即可)
ResNet 餘弦距離 語義相似度(特徵對應) 中(一次 forward pass)

兩者並非替代關係,而是互補

- 閱讀剩餘部分 -