<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Marketing on Tarragon</title><link>https://tarrragon.github.io/blog/tags/marketing/</link><description>Recent content in Marketing on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Sat, 20 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/marketing/index.xml" rel="self" type="application/rss+xml"/><item><title>突發流量的分類</title><link>https://tarrragon.github.io/blog/devops/07-burst-traffic/burst-classification/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/devops/07-burst-traffic/burst-classification/</guid><description>&lt;p>突發流量按可預測性分成兩類。可預期的突發（行銷活動、新聞發佈）可以事前準備容量；不可預期的突發（病毒傳播、error storm）只能靠架構設計吸收衝擊。&lt;/p>
&lt;h2 id="可預期突發">可預期突發&lt;/h2>
&lt;p>事前知道流量會增加，有時間準備。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>來源&lt;/th>
 &lt;th>流量倍率&lt;/th>
 &lt;th>持續時間&lt;/th>
 &lt;th>特徵&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>行銷活動（促銷、限時折扣）&lt;/td>
 &lt;td>5-50x&lt;/td>
 &lt;td>數小時～數天&lt;/td>
 &lt;td>流量集中在活動開始的前幾分鐘&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>新聞曝光（媒體報導、社群爆紅）&lt;/td>
 &lt;td>10-100x&lt;/td>
 &lt;td>數小時&lt;/td>
 &lt;td>不可控的流量曲線、峰值在發佈後 1-2 小時&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>定時推播（每日報表、週報）&lt;/td>
 &lt;td>2-10x&lt;/td>
 &lt;td>分鐘級&lt;/td>
 &lt;td>短暫但可精確預測時間&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>新版本推送（app store 更新）&lt;/td>
 &lt;td>3-10x&lt;/td>
 &lt;td>數天（逐漸擴散）&lt;/td>
 &lt;td>流量緩慢上升、峰值在推送後 24-48 小時&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>可預期突發的應對核心是&lt;strong>容量預備&lt;/strong> — 活動前擴容、活動後縮回。&lt;/p>
&lt;h3 id="預備清單">預備清單&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>項目&lt;/th>
 &lt;th>做什麼&lt;/th>
 &lt;th>何時做&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>容量估算&lt;/td>
 &lt;td>歷史峰值 × 安全係數（1.5-2x）&lt;/td>
 &lt;td>活動前 1 週&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>擴容&lt;/td>
 &lt;td>加實例 / 加資源 / 預熱 cache&lt;/td>
 &lt;td>活動前 1 天&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>降級預案&lt;/td>
 &lt;td>設定動態取樣的觸發閾值&lt;/td>
 &lt;td>活動前 1 天&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>壓力測試&lt;/td>
 &lt;td>模擬預期流量打 staging&lt;/td>
 &lt;td>活動前 3 天&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>值班&lt;/td>
 &lt;td>安排值班人員監控 dashboard&lt;/td>
 &lt;td>活動期間&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="不可預期突發">不可預期突發&lt;/h2>
&lt;p>事前不知道流量會增加，只能靠架構設計吸收。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>來源&lt;/th>
 &lt;th>流量倍率&lt;/th>
 &lt;th>持續時間&lt;/th>
 &lt;th>特徵&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>病毒傳播（社群分享爆量）&lt;/td>
 &lt;td>10-1000x&lt;/td>
 &lt;td>數小時&lt;/td>
 &lt;td>完全無法預測、可能超過任何預備容量&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>DDoS 攻擊&lt;/td>
 &lt;td>100-10000x&lt;/td>
 &lt;td>不定&lt;/td>
 &lt;td>惡意流量、需要 WAF / CDN 擋在前面&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Error storm（app bug 觸發大量 error）&lt;/td>
 &lt;td>依 bug 影響範圍&lt;/td>
 &lt;td>直到 hotfix&lt;/td>
 &lt;td>每個受影響的使用者都在送 error 事件&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>外部依賴復原（積壓請求一次湧入）&lt;/td>
 &lt;td>2-5x&lt;/td>
 &lt;td>分鐘級&lt;/td>
 &lt;td>依賴恢復後積壓的 retry 一起到達&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>不可預期突發的應對核心是&lt;strong>降級&lt;/strong> — 系統在超載時自動犧牲非核心功能，保住核心功能。&lt;/p>
&lt;h3 id="監控系統的-error-storm">監控系統的 error storm&lt;/h3>
&lt;p>Error storm 是監控系統特有的突發場景：被監控的 app 出了 bug，每個受影響的使用者都在送 error 事件。如果有 10 萬使用者同時遇到同一個 bug，collector 瞬間收到 10 萬筆 error 事件。&lt;/p>
&lt;p>Error storm 的矛盾：error 事件是 debug 最需要的資料，但 storm 時的大量 error 可能打垮 collector。處理策略是&lt;strong>保留前 N 筆完整 error（含 stack trace）、後續的 error 只計數不存原始資料&lt;/strong>。第一筆 error 的 stack trace 足夠 debug，後續的 10 萬筆只是確認影響範圍。&lt;/p>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;ul>
&lt;li>突發時的降級策略 → &lt;a href="https://tarrragon.github.io/blog/devops/07-burst-traffic/degradation-strategy/" data-link-title="降級策略" data-link-desc="系統超載時犧牲什麼保住什麼 — 動態取樣、事件優先級、功能降級、聚合前移四種策略">降級策略&lt;/a>&lt;/li>
&lt;li>Queue 做 burst 緩衝 → &lt;a href="https://tarrragon.github.io/blog/devops/07-burst-traffic/queue-buffering/" data-link-title="Queue 緩衝" data-link-desc="在 ingestion 和 processing 之間加 message queue 做 burst 緩衝 — Kafka / NATS / Redis Streams 的選型和引入條件">Queue 緩衝&lt;/a>&lt;/li>
&lt;li>不同規模的應對方案 → &lt;a href="https://tarrragon.github.io/blog/devops/07-burst-traffic/scale-tier-response/" data-link-title="規模分級應對表" data-link-desc="自用級 → 中型 → 大型 → 商業網站級的四級應對方案 — 每級的觸發條件、架構組成和成本">規模分級應對表&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>突發流量按可預測性分成兩類。可預期的突發（行銷活動、新聞發佈）可以事前準備容量；不可預期的突發（病毒傳播、error storm）只能靠架構設計吸收衝擊。</p>
<h2 id="可預期突發">可預期突發</h2>
<p>事前知道流量會增加，有時間準備。</p>
<table>
  <thead>
      <tr>
          <th>來源</th>
          <th>流量倍率</th>
          <th>持續時間</th>
          <th>特徵</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>行銷活動（促銷、限時折扣）</td>
          <td>5-50x</td>
          <td>數小時～數天</td>
          <td>流量集中在活動開始的前幾分鐘</td>
      </tr>
      <tr>
          <td>新聞曝光（媒體報導、社群爆紅）</td>
          <td>10-100x</td>
          <td>數小時</td>
          <td>不可控的流量曲線、峰值在發佈後 1-2 小時</td>
      </tr>
      <tr>
          <td>定時推播（每日報表、週報）</td>
          <td>2-10x</td>
          <td>分鐘級</td>
          <td>短暫但可精確預測時間</td>
      </tr>
      <tr>
          <td>新版本推送（app store 更新）</td>
          <td>3-10x</td>
          <td>數天（逐漸擴散）</td>
          <td>流量緩慢上升、峰值在推送後 24-48 小時</td>
      </tr>
  </tbody>
</table>
<p>可預期突發的應對核心是<strong>容量預備</strong> — 活動前擴容、活動後縮回。</p>
<h3 id="預備清單">預備清單</h3>
<table>
  <thead>
      <tr>
          <th>項目</th>
          <th>做什麼</th>
          <th>何時做</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>容量估算</td>
          <td>歷史峰值 × 安全係數（1.5-2x）</td>
          <td>活動前 1 週</td>
      </tr>
      <tr>
          <td>擴容</td>
          <td>加實例 / 加資源 / 預熱 cache</td>
          <td>活動前 1 天</td>
      </tr>
      <tr>
          <td>降級預案</td>
          <td>設定動態取樣的觸發閾值</td>
          <td>活動前 1 天</td>
      </tr>
      <tr>
          <td>壓力測試</td>
          <td>模擬預期流量打 staging</td>
          <td>活動前 3 天</td>
      </tr>
      <tr>
          <td>值班</td>
          <td>安排值班人員監控 dashboard</td>
          <td>活動期間</td>
      </tr>
  </tbody>
</table>
<h2 id="不可預期突發">不可預期突發</h2>
<p>事前不知道流量會增加，只能靠架構設計吸收。</p>
<table>
  <thead>
      <tr>
          <th>來源</th>
          <th>流量倍率</th>
          <th>持續時間</th>
          <th>特徵</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>病毒傳播（社群分享爆量）</td>
          <td>10-1000x</td>
          <td>數小時</td>
          <td>完全無法預測、可能超過任何預備容量</td>
      </tr>
      <tr>
          <td>DDoS 攻擊</td>
          <td>100-10000x</td>
          <td>不定</td>
          <td>惡意流量、需要 WAF / CDN 擋在前面</td>
      </tr>
      <tr>
          <td>Error storm（app bug 觸發大量 error）</td>
          <td>依 bug 影響範圍</td>
          <td>直到 hotfix</td>
          <td>每個受影響的使用者都在送 error 事件</td>
      </tr>
      <tr>
          <td>外部依賴復原（積壓請求一次湧入）</td>
          <td>2-5x</td>
          <td>分鐘級</td>
          <td>依賴恢復後積壓的 retry 一起到達</td>
      </tr>
  </tbody>
</table>
<p>不可預期突發的應對核心是<strong>降級</strong> — 系統在超載時自動犧牲非核心功能，保住核心功能。</p>
<h3 id="監控系統的-error-storm">監控系統的 error storm</h3>
<p>Error storm 是監控系統特有的突發場景：被監控的 app 出了 bug，每個受影響的使用者都在送 error 事件。如果有 10 萬使用者同時遇到同一個 bug，collector 瞬間收到 10 萬筆 error 事件。</p>
<p>Error storm 的矛盾：error 事件是 debug 最需要的資料，但 storm 時的大量 error 可能打垮 collector。處理策略是<strong>保留前 N 筆完整 error（含 stack trace）、後續的 error 只計數不存原始資料</strong>。第一筆 error 的 stack trace 足夠 debug，後續的 10 萬筆只是確認影響範圍。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>突發時的降級策略 → <a href="/blog/devops/07-burst-traffic/degradation-strategy/" data-link-title="降級策略" data-link-desc="系統超載時犧牲什麼保住什麼 — 動態取樣、事件優先級、功能降級、聚合前移四種策略">降級策略</a></li>
<li>Queue 做 burst 緩衝 → <a href="/blog/devops/07-burst-traffic/queue-buffering/" data-link-title="Queue 緩衝" data-link-desc="在 ingestion 和 processing 之間加 message queue 做 burst 緩衝 — Kafka / NATS / Redis Streams 的選型和引入條件">Queue 緩衝</a></li>
<li>不同規模的應對方案 → <a href="/blog/devops/07-burst-traffic/scale-tier-response/" data-link-title="規模分級應對表" data-link-desc="自用級 → 中型 → 大型 → 商業網站級的四級應對方案 — 每級的觸發條件、架構組成和成本">規模分級應對表</a></li>
</ul>
]]></content:encoded></item><item><title>Attribution</title><link>https://tarrragon.github.io/blog/monitoring/08-business-analytics/attribution/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/monitoring/08-business-analytics/attribution/</guid><description>&lt;p>Attribution（歸因）回答「使用者的轉換應該歸功於哪個渠道或觸點」。使用者可能先看到 Facebook 廣告、再 Google 搜尋、最後直接輸入網址完成購買 — 三個渠道都接觸了使用者，轉換功勞歸誰決定了行銷預算的分配。&lt;/p>
&lt;h2 id="歸因模型">歸因模型&lt;/h2>
&lt;h3 id="last-touch-attribution">Last-touch attribution&lt;/h3>
&lt;p>把轉換功勞全部歸給使用者轉換前最後接觸的渠道。上例中功勞歸「直接輸入網址」。&lt;/p>
&lt;p>優點：實作最簡單 — 只需要記錄轉換事件的 referrer 或 UTM 參數。&lt;/p>
&lt;p>缺點：忽略了前面渠道的貢獻。Facebook 廣告讓使用者第一次知道產品，但在 last-touch 模型中功勞為零。長期使用 last-touch 會導致行銷預算過度集中在「最後一步」渠道（品牌搜尋、直接訪問），低估「認知階段」渠道（展示廣告、社群媒體）。&lt;/p>
&lt;h3 id="first-touch-attribution">First-touch attribution&lt;/h3>
&lt;p>把轉換功勞全部歸給使用者第一次接觸的渠道。上例中功勞歸 Facebook 廣告。&lt;/p>
&lt;p>優點：強調「獲客」渠道的貢獻，適合評估品牌認知和獲客效率。&lt;/p>
&lt;p>缺點：忽略了後續渠道的推進作用。使用者第一次看到廣告但沒行動，可能是後續的 Google 搜尋才促成轉換。&lt;/p>
&lt;h3 id="multi-touch-attribution">Multi-touch attribution&lt;/h3>
&lt;p>把轉換功勞分配給使用者轉換路徑上的所有渠道。分配方式有多種：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>線性歸因&lt;/strong>：每個渠道平均分配。三個渠道各得 33.3%。&lt;/li>
&lt;li>&lt;strong>時間衰減&lt;/strong>：離轉換越近的渠道得到越多功勞。&lt;/li>
&lt;li>&lt;strong>Position-based（U 型）&lt;/strong>：第一個和最後一個渠道各得 40%，中間渠道分 20%。&lt;/li>
&lt;li>&lt;strong>資料驅動（data-driven）&lt;/strong>：用機器學習模型從歷史資料學習每個渠道的貢獻。需要大量資料。&lt;/li>
&lt;/ul>
&lt;h2 id="技術實作">技術實作&lt;/h2>
&lt;p>Attribution 的技術實作需要解決兩個問題：跨 session 的使用者識別，和觸點的記錄。&lt;/p>
&lt;h3 id="跨-session-識別">跨 session 識別&lt;/h3>
&lt;p>同一個使用者在不同 session、不同裝置、不同瀏覽器上的行為需要關聯到同一個人。&lt;/p>
&lt;p>Web 端用 cookie（first-party）或 login ID 關聯。Mobile 端用 device ID 或 login ID。跨裝置關聯需要使用者登入 — 未登入的使用者在不同裝置上是不同的匿名 ID。&lt;/p>
&lt;h3 id="觸點記錄">觸點記錄&lt;/h3>
&lt;p>每次使用者接觸產品的渠道需要記錄。Web 端記錄 referrer、UTM 參數（&lt;code>utm_source&lt;/code>、&lt;code>utm_medium&lt;/code>、&lt;code>utm_campaign&lt;/code>）。Mobile 端記錄 deep link 參數、app store 來源（需要 attribution SDK 如 AppsFlyer、Adjust）。&lt;/p>
&lt;h2 id="自架方案的歸因能力">自架方案的歸因能力&lt;/h2>
&lt;p>自架 collector 能做基礎的 last-touch attribution — 在轉換事件的屬性中記錄 referrer 和 UTM 參數。&lt;/p>
&lt;p>Multi-touch attribution 需要跨 session 的使用者行為歷史，實作複雜度顯著上升。如果 multi-touch 是核心需求，商業方案（GA4、Mixpanel、AppsFlyer）通常比自架更實用。&lt;/p>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;ul>
&lt;li>A/B test 驗證渠道效果 → &lt;a href="https://tarrragon.github.io/blog/monitoring/08-business-analytics/ab-test-statistics/" data-link-title="A/B Test 的統計基礎" data-link-desc="假設檢定、樣本量計算、多重比較校正 — A/B test 不只是「比較兩個數字」，統計方法決定結論是否可靠">A/B test 的統計基礎&lt;/a>&lt;/li>
&lt;li>使用者分群 → &lt;a href="https://tarrragon.github.io/blog/monitoring/08-business-analytics/cohort-analysis/" data-link-title="Cohort Analysis" data-link-desc="按共同特徵分群、比較不同群體的留存率和行為差異 — 從「平均值」到「誰在用、誰離開了」">Cohort analysis&lt;/a>&lt;/li>
&lt;li>行為事件設計 → &lt;a href="https://tarrragon.github.io/blog/monitoring/08-business-analytics/behavior-event-design/" data-link-title="行為事件設計" data-link-desc="事件命名規範、屬性設計、funnel 定義 — 行為分析的品質取決於事件設計的品質">行為事件設計&lt;/a>&lt;/li>
&lt;li>客戶取得成本 → &lt;a href="https://tarrragon.github.io/blog/business/knowledge-cards/cac/" data-link-title="CAC" data-link-desc="說明獲客成本及其對商業模式可行性的決定作用">CAC&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>Attribution（歸因）回答「使用者的轉換應該歸功於哪個渠道或觸點」。使用者可能先看到 Facebook 廣告、再 Google 搜尋、最後直接輸入網址完成購買 — 三個渠道都接觸了使用者，轉換功勞歸誰決定了行銷預算的分配。</p>
<h2 id="歸因模型">歸因模型</h2>
<h3 id="last-touch-attribution">Last-touch attribution</h3>
<p>把轉換功勞全部歸給使用者轉換前最後接觸的渠道。上例中功勞歸「直接輸入網址」。</p>
<p>優點：實作最簡單 — 只需要記錄轉換事件的 referrer 或 UTM 參數。</p>
<p>缺點：忽略了前面渠道的貢獻。Facebook 廣告讓使用者第一次知道產品，但在 last-touch 模型中功勞為零。長期使用 last-touch 會導致行銷預算過度集中在「最後一步」渠道（品牌搜尋、直接訪問），低估「認知階段」渠道（展示廣告、社群媒體）。</p>
<h3 id="first-touch-attribution">First-touch attribution</h3>
<p>把轉換功勞全部歸給使用者第一次接觸的渠道。上例中功勞歸 Facebook 廣告。</p>
<p>優點：強調「獲客」渠道的貢獻，適合評估品牌認知和獲客效率。</p>
<p>缺點：忽略了後續渠道的推進作用。使用者第一次看到廣告但沒行動，可能是後續的 Google 搜尋才促成轉換。</p>
<h3 id="multi-touch-attribution">Multi-touch attribution</h3>
<p>把轉換功勞分配給使用者轉換路徑上的所有渠道。分配方式有多種：</p>
<ul>
<li><strong>線性歸因</strong>：每個渠道平均分配。三個渠道各得 33.3%。</li>
<li><strong>時間衰減</strong>：離轉換越近的渠道得到越多功勞。</li>
<li><strong>Position-based（U 型）</strong>：第一個和最後一個渠道各得 40%，中間渠道分 20%。</li>
<li><strong>資料驅動（data-driven）</strong>：用機器學習模型從歷史資料學習每個渠道的貢獻。需要大量資料。</li>
</ul>
<h2 id="技術實作">技術實作</h2>
<p>Attribution 的技術實作需要解決兩個問題：跨 session 的使用者識別，和觸點的記錄。</p>
<h3 id="跨-session-識別">跨 session 識別</h3>
<p>同一個使用者在不同 session、不同裝置、不同瀏覽器上的行為需要關聯到同一個人。</p>
<p>Web 端用 cookie（first-party）或 login ID 關聯。Mobile 端用 device ID 或 login ID。跨裝置關聯需要使用者登入 — 未登入的使用者在不同裝置上是不同的匿名 ID。</p>
<h3 id="觸點記錄">觸點記錄</h3>
<p>每次使用者接觸產品的渠道需要記錄。Web 端記錄 referrer、UTM 參數（<code>utm_source</code>、<code>utm_medium</code>、<code>utm_campaign</code>）。Mobile 端記錄 deep link 參數、app store 來源（需要 attribution SDK 如 AppsFlyer、Adjust）。</p>
<h2 id="自架方案的歸因能力">自架方案的歸因能力</h2>
<p>自架 collector 能做基礎的 last-touch attribution — 在轉換事件的屬性中記錄 referrer 和 UTM 參數。</p>
<p>Multi-touch attribution 需要跨 session 的使用者行為歷史，實作複雜度顯著上升。如果 multi-touch 是核心需求，商業方案（GA4、Mixpanel、AppsFlyer）通常比自架更實用。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>A/B test 驗證渠道效果 → <a href="/blog/monitoring/08-business-analytics/ab-test-statistics/" data-link-title="A/B Test 的統計基礎" data-link-desc="假設檢定、樣本量計算、多重比較校正 — A/B test 不只是「比較兩個數字」，統計方法決定結論是否可靠">A/B test 的統計基礎</a></li>
<li>使用者分群 → <a href="/blog/monitoring/08-business-analytics/cohort-analysis/" data-link-title="Cohort Analysis" data-link-desc="按共同特徵分群、比較不同群體的留存率和行為差異 — 從「平均值」到「誰在用、誰離開了」">Cohort analysis</a></li>
<li>行為事件設計 → <a href="/blog/monitoring/08-business-analytics/behavior-event-design/" data-link-title="行為事件設計" data-link-desc="事件命名規範、屬性設計、funnel 定義 — 行為分析的品質取決於事件設計的品質">行為事件設計</a></li>
<li>客戶取得成本 → <a href="/blog/business/knowledge-cards/cac/" data-link-title="CAC" data-link-desc="說明獲客成本及其對商業模式可行性的決定作用">CAC</a></li>
</ul>
]]></content:encoded></item><item><title>RFM 分群</title><link>https://tarrragon.github.io/blog/monitoring/08-business-analytics/rfm-segmentation/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/monitoring/08-business-analytics/rfm-segmentation/</guid><description>&lt;p>&lt;a href="https://tarrragon.github.io/blog/monitoring/knowledge-cards/rfm/" data-link-title="RFM" data-link-desc="說明用 Recency / Frequency / Monetary 三個維度把使用者分成可操作群組的分群方法">RFM&lt;/a> 分群用三個維度衡量使用者的價值：Recency（最近一次互動是多久前）、Frequency（互動的頻率）、Monetary（互動的金額或價值）。三個維度各自獨立評分，組合成使用者的 RFM profile，驅動差異化的營運策略。&lt;/p>
&lt;h2 id="三個維度">三個維度&lt;/h2>
&lt;h3 id="recency最近一次互動的時間距離">Recency：最近一次互動的時間距離&lt;/h3>
&lt;p>計算使用者最後一次有意義的互動到現在的天數。「有意義的互動」取決於業務定義 — 電商是最後一次購買，SaaS 是最後一次登入，媒體是最後一次內容消費。&lt;/p>
&lt;p>Recency 的價值在於「最近互動的使用者比很久沒來的使用者更可能再次互動」。Recency 高（最近才來）的使用者是活躍群體，Recency 低（很久沒來）的使用者是流失風險群體。&lt;/p>
&lt;h3 id="frequency互動的頻率">Frequency：互動的頻率&lt;/h3>
&lt;p>計算使用者在特定時間窗口內的互動次數。時間窗口取決於業務節奏 — 日用品電商看近 90 天的購買次數，SaaS 看近 30 天的登入次數。&lt;/p>
&lt;p>Frequency 區分「偶爾來的使用者」和「常客」。高頻使用者是產品的核心用戶群，他們的行為和需求代表產品的核心價值。&lt;/p>
&lt;h3 id="monetary互動的價值">Monetary：互動的價值&lt;/h3>
&lt;p>計算使用者在特定時間窗口內貢獻的總金額。適用於有直接收入的業務（電商、訂閱服務）。&lt;/p>
&lt;p>沒有直接收入的產品可以用替代指標：內容平台用消費的內容數量，社群平台用產生的內容數量，工具類產品用使用的功能數量。替代指標的選擇依據是「哪個行為最能代表使用者的投入程度」。&lt;/p>
&lt;h2 id="rfm-分數計算">RFM 分數計算&lt;/h2>
&lt;p>每個維度獨立評分，通常用 1-5 分。評分方式有兩種：&lt;/p>
&lt;h3 id="等距分割">等距分割&lt;/h3>
&lt;p>把每個維度的值域等分成 5 段。Recency 0-6 天 = 5 分、7-13 天 = 4 分、依此類推。&lt;/p>
&lt;p>優點是簡單直覺；缺點是不考慮使用者分佈 — 如果大部分使用者的 Recency 在 0-6 天，5 分的群體佔大多數，分群的鑑別度低。&lt;/p>
&lt;h3 id="等量分割分位數">等量分割（分位數）&lt;/h3>
&lt;p>用分位數確保每個分數段的使用者數量大致相等。前 20% 的 Recency = 5 分、次 20% = 4 分。&lt;/p>
&lt;p>優點是每個分數段有足夠的使用者數量做分析；缺點是分數的業務意義不固定 — 5 分代表的天數取決於使用者分佈，不是固定的閾值。&lt;/p>
&lt;h2 id="rfm-群體定義">RFM 群體定義&lt;/h2>
&lt;p>三個維度各 5 分，組合出 125 種 RFM profile（5 × 5 × 5）。實務上不需要 125 種策略，通常歸納成 5-8 個有業務意義的群體：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>群體&lt;/th>
 &lt;th>RFM 特徵&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;th>策略方向&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>冠軍客戶&lt;/td>
 &lt;td>R5 F5 M5&lt;/td>
 &lt;td>最近才來、經常來、消費高&lt;/td>
 &lt;td>維持關係、VIP 待遇&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>忠實客戶&lt;/td>
 &lt;td>R4-5 F4-5 M3-5&lt;/td>
 &lt;td>經常來、消費中到高&lt;/td>
 &lt;td>交叉銷售、推薦&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>潛力客戶&lt;/td>
 &lt;td>R4-5 F1-2 M1-2&lt;/td>
 &lt;td>最近才來、但頻率和消費低&lt;/td>
 &lt;td>引導更多互動&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>沉睡客戶&lt;/td>
 &lt;td>R1-2 F3-5 M3-5&lt;/td>
 &lt;td>曾經活躍但很久沒來&lt;/td>
 &lt;td>挽回活動&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>流失客戶&lt;/td>
 &lt;td>R1 F1 M1&lt;/td>
 &lt;td>很久沒來、頻率低、消費低&lt;/td>
 &lt;td>評估挽回成本效益&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="工程實作">工程實作&lt;/h2>
&lt;p>RFM 計算的輸入是使用者的行為事件。從 collector 的 JSONL 資料計算 RFM：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>擷取&lt;/strong>：篩選目標事件（購買、登入、使用功能），按 user_id 分群&lt;/li>
&lt;li>&lt;strong>計算 R&lt;/strong>：每個 user_id 的最新事件時間到現在的天數&lt;/li>
&lt;li>&lt;strong>計算 F&lt;/strong>：每個 user_id 在時間窗口內的事件數量&lt;/li>
&lt;li>&lt;strong>計算 M&lt;/strong>：每個 user_id 在時間窗口內的 monetary 屬性加總&lt;/li>
&lt;li>&lt;strong>評分&lt;/strong>：對 R/F/M 各自用分位數或等距分割評分&lt;/li>
&lt;li>&lt;strong>分群&lt;/strong>：根據 RFM 分數組合定義群體&lt;/li>
&lt;/ol>
&lt;p>這個計算可以用 SQL（如果資料在資料庫）或 Python pandas（如果資料在 JSONL 檔案）完成。定期重算（每天或每週），產出使用者群體標籤。&lt;/p>
&lt;p>RFM 分群需要的資料可以從自架 collector 提取 — &lt;a href="https://tarrragon.github.io/blog/monitoring/08-business-analytics/self-hosted-funnel/" data-link-title="從 collector 資料做基礎 funnel 分析" data-link-desc="SQLite 層能做什麼程度的 funnel、PostgreSQL 層提供什麼進階能力、JSONL 匯出後的臨時分析">從 collector 資料做基礎 funnel 分析&lt;/a>展示了 grep + jq 在自架環境中的分析能力和邊界。RFM 分出的群體還可以用 &lt;a href="https://tarrragon.github.io/blog/monitoring/08-business-analytics/cohort-analysis/" data-link-title="Cohort Analysis" data-link-desc="按共同特徵分群、比較不同群體的留存率和行為差異 — 從「平均值」到「誰在用、誰離開了」">Cohort analysis&lt;/a> 追蹤留存趨勢，兩種分析互補。分群和分析的前提是正確的&lt;a href="https://tarrragon.github.io/blog/monitoring/08-business-analytics/behavior-event-design/" data-link-title="行為事件設計" data-link-desc="事件命名規範、屬性設計、funnel 定義 — 行為分析的品質取決於事件設計的品質">行為事件設計&lt;/a> — 事件的屬性決定了 R/F/M 能否被計算。&lt;/p></description><content:encoded><![CDATA[<p><a href="/blog/monitoring/knowledge-cards/rfm/" data-link-title="RFM" data-link-desc="說明用 Recency / Frequency / Monetary 三個維度把使用者分成可操作群組的分群方法">RFM</a> 分群用三個維度衡量使用者的價值：Recency（最近一次互動是多久前）、Frequency（互動的頻率）、Monetary（互動的金額或價值）。三個維度各自獨立評分，組合成使用者的 RFM profile，驅動差異化的營運策略。</p>
<h2 id="三個維度">三個維度</h2>
<h3 id="recency最近一次互動的時間距離">Recency：最近一次互動的時間距離</h3>
<p>計算使用者最後一次有意義的互動到現在的天數。「有意義的互動」取決於業務定義 — 電商是最後一次購買，SaaS 是最後一次登入，媒體是最後一次內容消費。</p>
<p>Recency 的價值在於「最近互動的使用者比很久沒來的使用者更可能再次互動」。Recency 高（最近才來）的使用者是活躍群體，Recency 低（很久沒來）的使用者是流失風險群體。</p>
<h3 id="frequency互動的頻率">Frequency：互動的頻率</h3>
<p>計算使用者在特定時間窗口內的互動次數。時間窗口取決於業務節奏 — 日用品電商看近 90 天的購買次數，SaaS 看近 30 天的登入次數。</p>
<p>Frequency 區分「偶爾來的使用者」和「常客」。高頻使用者是產品的核心用戶群，他們的行為和需求代表產品的核心價值。</p>
<h3 id="monetary互動的價值">Monetary：互動的價值</h3>
<p>計算使用者在特定時間窗口內貢獻的總金額。適用於有直接收入的業務（電商、訂閱服務）。</p>
<p>沒有直接收入的產品可以用替代指標：內容平台用消費的內容數量，社群平台用產生的內容數量，工具類產品用使用的功能數量。替代指標的選擇依據是「哪個行為最能代表使用者的投入程度」。</p>
<h2 id="rfm-分數計算">RFM 分數計算</h2>
<p>每個維度獨立評分，通常用 1-5 分。評分方式有兩種：</p>
<h3 id="等距分割">等距分割</h3>
<p>把每個維度的值域等分成 5 段。Recency 0-6 天 = 5 分、7-13 天 = 4 分、依此類推。</p>
<p>優點是簡單直覺；缺點是不考慮使用者分佈 — 如果大部分使用者的 Recency 在 0-6 天，5 分的群體佔大多數，分群的鑑別度低。</p>
<h3 id="等量分割分位數">等量分割（分位數）</h3>
<p>用分位數確保每個分數段的使用者數量大致相等。前 20% 的 Recency = 5 分、次 20% = 4 分。</p>
<p>優點是每個分數段有足夠的使用者數量做分析；缺點是分數的業務意義不固定 — 5 分代表的天數取決於使用者分佈，不是固定的閾值。</p>
<h2 id="rfm-群體定義">RFM 群體定義</h2>
<p>三個維度各 5 分，組合出 125 種 RFM profile（5 × 5 × 5）。實務上不需要 125 種策略，通常歸納成 5-8 個有業務意義的群體：</p>
<table>
  <thead>
      <tr>
          <th>群體</th>
          <th>RFM 特徵</th>
          <th>描述</th>
          <th>策略方向</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>冠軍客戶</td>
          <td>R5 F5 M5</td>
          <td>最近才來、經常來、消費高</td>
          <td>維持關係、VIP 待遇</td>
      </tr>
      <tr>
          <td>忠實客戶</td>
          <td>R4-5 F4-5 M3-5</td>
          <td>經常來、消費中到高</td>
          <td>交叉銷售、推薦</td>
      </tr>
      <tr>
          <td>潛力客戶</td>
          <td>R4-5 F1-2 M1-2</td>
          <td>最近才來、但頻率和消費低</td>
          <td>引導更多互動</td>
      </tr>
      <tr>
          <td>沉睡客戶</td>
          <td>R1-2 F3-5 M3-5</td>
          <td>曾經活躍但很久沒來</td>
          <td>挽回活動</td>
      </tr>
      <tr>
          <td>流失客戶</td>
          <td>R1 F1 M1</td>
          <td>很久沒來、頻率低、消費低</td>
          <td>評估挽回成本效益</td>
      </tr>
  </tbody>
</table>
<h2 id="工程實作">工程實作</h2>
<p>RFM 計算的輸入是使用者的行為事件。從 collector 的 JSONL 資料計算 RFM：</p>
<ol>
<li><strong>擷取</strong>：篩選目標事件（購買、登入、使用功能），按 user_id 分群</li>
<li><strong>計算 R</strong>：每個 user_id 的最新事件時間到現在的天數</li>
<li><strong>計算 F</strong>：每個 user_id 在時間窗口內的事件數量</li>
<li><strong>計算 M</strong>：每個 user_id 在時間窗口內的 monetary 屬性加總</li>
<li><strong>評分</strong>：對 R/F/M 各自用分位數或等距分割評分</li>
<li><strong>分群</strong>：根據 RFM 分數組合定義群體</li>
</ol>
<p>這個計算可以用 SQL（如果資料在資料庫）或 Python pandas（如果資料在 JSONL 檔案）完成。定期重算（每天或每週），產出使用者群體標籤。</p>
<p>RFM 分群需要的資料可以從自架 collector 提取 — <a href="/blog/monitoring/08-business-analytics/self-hosted-funnel/" data-link-title="從 collector 資料做基礎 funnel 分析" data-link-desc="SQLite 層能做什麼程度的 funnel、PostgreSQL 層提供什麼進階能力、JSONL 匯出後的臨時分析">從 collector 資料做基礎 funnel 分析</a>展示了 grep + jq 在自架環境中的分析能力和邊界。RFM 分出的群體還可以用 <a href="/blog/monitoring/08-business-analytics/cohort-analysis/" data-link-title="Cohort Analysis" data-link-desc="按共同特徵分群、比較不同群體的留存率和行為差異 — 從「平均值」到「誰在用、誰離開了」">Cohort analysis</a> 追蹤留存趨勢，兩種分析互補。分群和分析的前提是正確的<a href="/blog/monitoring/08-business-analytics/behavior-event-design/" data-link-title="行為事件設計" data-link-desc="事件命名規範、屬性設計、funnel 定義 — 行為分析的品質取決於事件設計的品質">行為事件設計</a> — 事件的屬性決定了 R/F/M 能否被計算。</p>
]]></content:encoded></item><item><title>模組八：行為資料的商業利用</title><link>https://tarrragon.github.io/blog/monitoring/08-business-analytics/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/monitoring/08-business-analytics/</guid><description>&lt;p>回答「蒐集到的行為資料除了 debug，還能做什麼」。前提：&lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/" data-link-title="模組七：資安與隱私" data-link-desc="SDK redaction / transport 加密 / collector access control / 去識別化 — 蒐集的資料本身就是風險資產">模組七&lt;/a> 的去識別化是本模組的入場條件。&lt;/p>
&lt;h2 id="待寫章節">待寫章節&lt;/h2>
&lt;ul>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 行為事件設計（事件命名規範 / 屬性設計 / funnel 定義）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> Funnel analysis（使用者在哪一步流失）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> Cohort analysis（不同族群的留存率差異）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> Attribution（使用者從哪來、哪個廣告帶來轉換）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> A/B test 的統計基礎（假設檢定 / 樣本量 / 多重比較）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 推薦系統概論（collaborative filtering / content-based / 混合）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> RFM 分群（Recency / Frequency / Monetary 的工程實作）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 從 collector 資料做基礎 funnel 分析（自架方案能做到哪裡）&lt;/li>
&lt;/ul>
&lt;h2 id="跨分類引用">跨分類引用&lt;/h2>
&lt;ul>
&lt;li>← &lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/" data-link-title="模組七：資安與隱私" data-link-desc="SDK redaction / transport 加密 / collector access control / 去識別化 — 蒐集的資料本身就是風險資產">monitoring 模組七 資安&lt;/a>：去識別化是入場條件&lt;/li>
&lt;li>← &lt;a href="https://tarrragon.github.io/blog/monitoring/01-mental-model/" data-link-title="模組一：監控心智模型" data-link-desc="四類事件（event / error / metric / lifecycle）的分類與收集策略">monitoring 模組一 心智模型&lt;/a>：event 類事件是行為分析的原料&lt;/li>
&lt;li>← &lt;a href="https://tarrragon.github.io/blog/ux-design/01-screen-state-machine/" data-link-title="模組一：畫面狀態機設計" data-link-desc="畫面狀態矩陣（顯示 / 操作 / 進入 / 退出）— 退出路徑為空 = UX 死胡同">ux-design 模組一 畫面狀態機&lt;/a>：狀態轉換事件 → funnel 分析&lt;/li>
&lt;li>待建連結 → &lt;code>data-engineering/&lt;/code>（資料管線設計）&lt;/li>
&lt;li>待建連結 → &lt;code>statistics/&lt;/code>（A/B test 統計基礎）&lt;/li>
&lt;li>待建連結 → &lt;code>machine-learning/&lt;/code>（推薦系統架構）&lt;/li>
&lt;li>待建連結 → &lt;code>compliance/&lt;/code>（GDPR / CCPA / 個資法）&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>回答「蒐集到的行為資料除了 debug，還能做什麼」。前提：<a href="/blog/monitoring/07-security-privacy/" data-link-title="模組七：資安與隱私" data-link-desc="SDK redaction / transport 加密 / collector access control / 去識別化 — 蒐集的資料本身就是風險資產">模組七</a> 的去識別化是本模組的入場條件。</p>
<h2 id="待寫章節">待寫章節</h2>
<ul>
<li><input checked="" disabled="" type="checkbox"> 行為事件設計（事件命名規範 / 屬性設計 / funnel 定義）</li>
<li><input checked="" disabled="" type="checkbox"> Funnel analysis（使用者在哪一步流失）</li>
<li><input checked="" disabled="" type="checkbox"> Cohort analysis（不同族群的留存率差異）</li>
<li><input checked="" disabled="" type="checkbox"> Attribution（使用者從哪來、哪個廣告帶來轉換）</li>
<li><input checked="" disabled="" type="checkbox"> A/B test 的統計基礎（假設檢定 / 樣本量 / 多重比較）</li>
<li><input checked="" disabled="" type="checkbox"> 推薦系統概論（collaborative filtering / content-based / 混合）</li>
<li><input checked="" disabled="" type="checkbox"> RFM 分群（Recency / Frequency / Monetary 的工程實作）</li>
<li><input checked="" disabled="" type="checkbox"> 從 collector 資料做基礎 funnel 分析（自架方案能做到哪裡）</li>
</ul>
<h2 id="跨分類引用">跨分類引用</h2>
<ul>
<li>← <a href="/blog/monitoring/07-security-privacy/" data-link-title="模組七：資安與隱私" data-link-desc="SDK redaction / transport 加密 / collector access control / 去識別化 — 蒐集的資料本身就是風險資產">monitoring 模組七 資安</a>：去識別化是入場條件</li>
<li>← <a href="/blog/monitoring/01-mental-model/" data-link-title="模組一：監控心智模型" data-link-desc="四類事件（event / error / metric / lifecycle）的分類與收集策略">monitoring 模組一 心智模型</a>：event 類事件是行為分析的原料</li>
<li>← <a href="/blog/ux-design/01-screen-state-machine/" data-link-title="模組一：畫面狀態機設計" data-link-desc="畫面狀態矩陣（顯示 / 操作 / 進入 / 退出）— 退出路徑為空 = UX 死胡同">ux-design 模組一 畫面狀態機</a>：狀態轉換事件 → funnel 分析</li>
<li>待建連結 → <code>data-engineering/</code>（資料管線設計）</li>
<li>待建連結 → <code>statistics/</code>（A/B test 統計基礎）</li>
<li>待建連結 → <code>machine-learning/</code>（推薦系統架構）</li>
<li>待建連結 → <code>compliance/</code>（GDPR / CCPA / 個資法）</li>
</ul>
]]></content:encoded></item></channel></rss>