[{"data":1,"prerenderedAt":1371},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fen\u002Fgaming\u002Flive-ops-calendar-retention-engineering-churn-18-percent":13},{"i18nKey":4,"paths":5},"gaming-003-2026-07",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fgaming\u002Flive-ops-kalender-retention-engineering-churn-reduktion","\u002Fen\u002Fgaming\u002Flive-ops-calendar-retention-engineering-churn-18-percent","\u002Fes\u002Fgaming\u002Fcalendario-live-ops-retention-engineering-churn","\u002Ffr\u002Fgaming\u002Flive-ops-calendar-retention-engineering-churn-18","\u002Fit\u002Fgaming\u002Fcalendario-live-ops-retention-engineering-churn-18","\u002Fru\u002Fgaming\u002Flive-ops-calendar-retention-engineering-churn-reduction","\u002Ftr\u002Fgaming\u002Flive-ops-calendar-retention-engineering-ile-churn-18",{"_path":7,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":1365,"_id":1366,"_source":1367,"_file":1368,"_stem":1369,"_extension":1370},"gaming",false,"","Live Ops Calendar: Retention Engineering and 18% Churn Reduction","Data-driven live ops strategy optimizing event cadence, content depth, and monetization-retention balance with Markov cohort modeling to reduce churn.","2026-07-24",[21,22,23,24,25],"live-ops","retention-engineering","churn-optimization","mobile-gaming","f2p-monetization",8,"Roibase",{"type":29,"children":30,"toc":1351},"root",[31,39,46,51,65,70,77,90,96,101,106,111,266,271,277,282,287,307,313,318,324,366,1205,1210,1216,1229,1242,1261,1267,1272,1280,1309,1315,1331,1336,1340,1345],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","The assumption that live ops in mobile F2P games is about \"continuous content pumping\" is obsolete by 2026. Most studios treat events as a filling mechanism—yet when event cadence, content depth, and monetization-retention balance are optimized via Markov cohort modeling, churn drops 18%. Live ops is no longer a calendar; it's a retention engineering system.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"leaving-event-cadence-to-chance-is-expensive",[44],{"type":37,"value":45},"Leaving Event Cadence to Chance Is Expensive",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"Most studios build weekly event rotation on a \"something every week\" logic. This approach has two problems: first, it doesn't calibrate event frequency to cohort dynamics; second, it balances monetization events against engagement events by assumption.",{"type":32,"tag":33,"props":52,"children":53},{},[54,56,63],{"type":37,"value":55},"In Markov cohort models, each event type (seasonal, monetization, progression) is defined as a state. The probability of a player transitioning from one event to another is calculated via ",{"type":32,"tag":57,"props":58,"children":60},"code",{"className":59},[],[61],{"type":37,"value":62},"P(event_j | event_i, session_gap)",{"type":37,"value":64},". This transition matrix reveals event fatigue risk and the optimal return window. For example, if a studio launches a progression event 72 hours after a gacha event, churn increases 12%—because the player's inventory hasn't settled. A 120-hour gap cuts churn to -8%.",{"type":32,"tag":33,"props":66,"children":67},{},[68],{"type":37,"value":69},"Optimizing cadence requires modeling D1\u002FD3\u002FD7 cohorts separately. For D1, event exposure should be 0%—opening event UI before onboarding completes drops retention by 22% (Deconstructor of Fun 2025 benchmark). For D3, the first event should be a mini-progression event (retention +9%); for D7+, monetization can open. The event calendar isn't one cycle; it's a cohort-state matrix.",{"type":32,"tag":71,"props":72,"children":74},"h3",{"id":73},"how-to-find-the-event-fatigue-threshold",[75],{"type":37,"value":76},"How to Find the Event Fatigue Threshold",{"type":32,"tag":33,"props":78,"children":79},{},[80,82,88],{"type":37,"value":81},"Event fatigue is measured via ",{"type":32,"tag":57,"props":83,"children":85},{"className":84},[],[86],{"type":37,"value":87},"session_gap \u002F event_duration",{"type":37,"value":89}," ratio. When the ratio falls below 2 (e.g., a 3-day event followed by a new event 5 days later), player ARPU drops 14%. The optimal ratio is 3.5–4.5—meaning the gap after an event ends should be 3.5x the event duration. Progression systems should fill this gap; otherwise, churn rises.",{"type":32,"tag":40,"props":91,"children":93},{"id":92},"content-depth-event-length-vs-engagement-paradox",[94],{"type":37,"value":95},"Content Depth: Event Length vs. Engagement Paradox",{"type":32,"tag":33,"props":97,"children":98},{},[99],{"type":37,"value":100},"Longer events don't deliver more engagement—measurable depth does. A 7-day event isn't 40% longer than a 3-day event; it increases daily player commitment. Yet without proper depth architecture, the last 2 days see a 60% engagement drop.",{"type":32,"tag":33,"props":102,"children":103},{},[104],{"type":37,"value":105},"Defining content depth means breaking an event into atomic tasks and measuring each task's completion time. For example, a battlepass with 50 tiers, if players complete an average of 4 tiers daily, the event must run a minimum of 12.5 days—but that's \"minimum completion,\" not depth. Add a 20% buffer for depth (15 days). If an event runs shorter than 15 days, 35% of players tick through final tiers in autopilot, and perceived value drops.",{"type":32,"tag":33,"props":107,"children":108},{},[109],{"type":37,"value":110},"The second dimension of content depth is branching. Replacing a single linear event with parallel tracks (PvE + PvP + crafting) increases daily session duration by 18%. But more than 4 tracks, players get lost in the UI and churn jumps 11%. Optimal content architecture is 3 parallel tracks + 1 shared final milestone.",{"type":32,"tag":112,"props":113,"children":114},"table",{},[115,149],{"type":32,"tag":116,"props":117,"children":118},"thead",{},[119],{"type":32,"tag":120,"props":121,"children":122},"tr",{},[123,129,134,139,144],{"type":32,"tag":124,"props":125,"children":126},"th",{},[127],{"type":37,"value":128},"Event Type",{"type":32,"tag":124,"props":130,"children":131},{},[132],{"type":37,"value":133},"Track Count",{"type":32,"tag":124,"props":135,"children":136},{},[137],{"type":37,"value":138},"Avg Daily Playtime (min)",{"type":32,"tag":124,"props":140,"children":141},{},[142],{"type":37,"value":143},"Completion %",{"type":32,"tag":124,"props":145,"children":146},{},[147],{"type":37,"value":148},"D7 Churn",{"type":32,"tag":150,"props":151,"children":152},"tbody",{},[153,182,210,238],{"type":32,"tag":120,"props":154,"children":155},{},[156,162,167,172,177],{"type":32,"tag":157,"props":158,"children":159},"td",{},[160],{"type":37,"value":161},"Linear (1 track)",{"type":32,"tag":157,"props":163,"children":164},{},[165],{"type":37,"value":166},"1",{"type":32,"tag":157,"props":168,"children":169},{},[170],{"type":37,"value":171},"22",{"type":32,"tag":157,"props":173,"children":174},{},[175],{"type":37,"value":176},"48%",{"type":32,"tag":157,"props":178,"children":179},{},[180],{"type":37,"value":181},"19%",{"type":32,"tag":120,"props":183,"children":184},{},[185,190,195,200,205],{"type":32,"tag":157,"props":186,"children":187},{},[188],{"type":37,"value":189},"Dual track",{"type":32,"tag":157,"props":191,"children":192},{},[193],{"type":37,"value":194},"2",{"type":32,"tag":157,"props":196,"children":197},{},[198],{"type":37,"value":199},"28",{"type":32,"tag":157,"props":201,"children":202},{},[203],{"type":37,"value":204},"56%",{"type":32,"tag":157,"props":206,"children":207},{},[208],{"type":37,"value":209},"14%",{"type":32,"tag":120,"props":211,"children":212},{},[213,218,223,228,233],{"type":32,"tag":157,"props":214,"children":215},{},[216],{"type":37,"value":217},"Triple track",{"type":32,"tag":157,"props":219,"children":220},{},[221],{"type":37,"value":222},"3",{"type":32,"tag":157,"props":224,"children":225},{},[226],{"type":37,"value":227},"34",{"type":32,"tag":157,"props":229,"children":230},{},[231],{"type":37,"value":232},"61%",{"type":32,"tag":157,"props":234,"children":235},{},[236],{"type":37,"value":237},"11%",{"type":32,"tag":120,"props":239,"children":240},{},[241,246,251,256,261],{"type":32,"tag":157,"props":242,"children":243},{},[244],{"type":37,"value":245},"Quad track",{"type":32,"tag":157,"props":247,"children":248},{},[249],{"type":37,"value":250},"4+",{"type":32,"tag":157,"props":252,"children":253},{},[254],{"type":37,"value":255},"29",{"type":32,"tag":157,"props":257,"children":258},{},[259],{"type":37,"value":260},"43%",{"type":32,"tag":157,"props":262,"children":263},{},[264],{"type":37,"value":265},"20%",{"type":32,"tag":33,"props":267,"children":268},{},[269],{"type":37,"value":270},"Data: 8 mid-core titles, Q4 2025 cohort metrics (source: GameRefinery Retention Toolkit). Triple track hits the retention-completion sweet spot; quad track loses to UI complexity.",{"type":32,"tag":40,"props":272,"children":274},{"id":273},"monetization-retention-balance-the-cost-of-iap-events",[275],{"type":37,"value":276},"Monetization-Retention Balance: The Cost of IAP Events",{"type":32,"tag":33,"props":278,"children":279},{},[280],{"type":37,"value":281},"Monetization events (limited offer, gacha banner, discount bundle) boost short-term ARPU but create asymmetric retention impact. A single IAP event can drop D7 retention by 3–5%—because after purchase, the player accelerates content consumption and hits a plateau early.",{"type":32,"tag":33,"props":283,"children":284},{},[285],{"type":37,"value":286},"Balancing this requires maintaining a 1:2.5 ratio of \"monetization windows\" to \"progression windows\" in the event calendar. Over a 4-week month, allocate 1.5 weeks to monetization events and 2.5 weeks to progression\u002Fengagement. When this ratio breaks (e.g., monetization every week), perceived \"pay-to-win pressure\" rises and organic retention drops 16%.",{"type":32,"tag":33,"props":288,"children":289},{},[290,292,298,300,305],{"type":37,"value":291},"Two mechanics are critical to making monetization events retention-safe: ",{"type":32,"tag":293,"props":294,"children":295},"strong",{},[296],{"type":37,"value":297},"first",{"type":37,"value":299},", don't unlock new content immediately after IAP—give the player time to digest what they've bought (72–96 hours of cooldown). ",{"type":32,"tag":293,"props":301,"children":302},{},[303],{"type":37,"value":304},"Second",{"type":37,"value":306},", tie the monetization event reward to a progression event. If a gacha pull requires the new character to level up through progression tasks, IAP and engagement lock together and churn falls.",{"type":32,"tag":71,"props":308,"children":310},{"id":309},"hard-currency-sink-timing",[311],{"type":37,"value":312},"Hard Currency Sink Timing",{"type":32,"tag":33,"props":314,"children":315},{},[316],{"type":37,"value":317},"Hard currency (gems, diamonds) spending events should time against player inventory distribution. When a player's currency exceeds median by 120% (wealthy cohort), opening a spending event boosts ARPU by 31%. If a player's currency is below 60% of median, spending events increase churn by 9%—the player feels \"locked out.\" Pull a currency distribution histogram weekly and time events accordingly; this is the backbone of monetization-retention balance.",{"type":32,"tag":40,"props":319,"children":321},{"id":320},"building-the-live-ops-calendar-in-sql",[322],{"type":37,"value":323},"Building the Live Ops Calendar in SQL",{"type":32,"tag":33,"props":325,"children":326},{},[327,329,335,337,343,344,350,351,357,358,364],{"type":37,"value":328},"Instead of Excel, model events as a state machine in SQL, auto-optimizing cadence, depth, and monetization balance. Define each event with ",{"type":32,"tag":57,"props":330,"children":332},{"className":331},[],[333],{"type":37,"value":334},"event_type",{"type":37,"value":336},", ",{"type":32,"tag":57,"props":338,"children":340},{"className":339},[],[341],{"type":37,"value":342},"duration",{"type":37,"value":336},{"type":32,"tag":57,"props":345,"children":347},{"className":346},[],[348],{"type":37,"value":349},"cooldown_min",{"type":37,"value":336},{"type":32,"tag":57,"props":352,"children":354},{"className":353},[],[355],{"type":37,"value":356},"target_cohort",{"type":37,"value":336},{"type":32,"tag":57,"props":359,"children":361},{"className":360},[],[362],{"type":37,"value":363},"monetization_flag",{"type":37,"value":365},". A daily script reads cohort distribution and selects the next event.",{"type":32,"tag":367,"props":368,"children":372},"pre",{"code":369,"language":370,"meta":16,"className":371,"style":16},"WITH cohort_state AS (\n  SELECT\n    cohort_day,\n    COUNT(DISTINCT user_id) AS users,\n    AVG(session_count_7d) AS avg_sessions,\n    AVG(hard_currency) AS avg_currency\n  FROM user_metrics\n  WHERE last_session >= CURRENT_DATE - 7\n  GROUP BY cohort_day\n),\nevent_candidates AS (\n  SELECT\n    event_id,\n    event_type,\n    duration,\n    cooldown_min,\n    target_cohort_min,\n    target_cohort_max,\n    monetization_flag,\n    COALESCE(last_run_date, '2020-01-01') AS last_run\n  FROM live_ops_events\n  WHERE\n    CURRENT_DATE - COALESCE(last_run_date, '2020-01-01') >= cooldown_min\n)\nSELECT\n  ec.event_id,\n  ec.event_type,\n  ec.duration,\n  SUM(cs.users) AS eligible_users,\n  AVG(cs.avg_sessions) AS cohort_engagement,\n  AVG(cs.avg_currency) AS cohort_wealth\nFROM event_candidates ec\nJOIN cohort_state cs\n  ON cs.cohort_day BETWEEN ec.target_cohort_min AND ec.target_cohort_max\nWHERE\n  (ec.monetization_flag = 0 OR cs.avg_currency > 500)\nGROUP BY ec.event_id, ec.event_type, ec.duration\nORDER BY cohort_engagement DESC\nLIMIT 1;\n","sql","language-sql shiki shiki-themes github-dark",[373],{"type":32,"tag":57,"props":374,"children":375},{"__ignoreMap":16},[376,404,413,422,456,479,501,515,548,562,571,588,596,605,614,623,632,641,650,659,693,706,715,754,763,772,796,816,836,876,915,953,967,981,1041,1050,1113,1167,1186],{"type":32,"tag":377,"props":378,"children":381},"span",{"class":379,"line":380},"line",1,[382,388,394,399],{"type":32,"tag":377,"props":383,"children":385},{"style":384},"--shiki-default:#F97583",[386],{"type":37,"value":387},"WITH",{"type":32,"tag":377,"props":389,"children":391},{"style":390},"--shiki-default:#E1E4E8",[392],{"type":37,"value":393}," cohort_state ",{"type":32,"tag":377,"props":395,"children":396},{"style":384},[397],{"type":37,"value":398},"AS",{"type":32,"tag":377,"props":400,"children":401},{"style":390},[402],{"type":37,"value":403}," (\n",{"type":32,"tag":377,"props":405,"children":407},{"class":379,"line":406},2,[408],{"type":32,"tag":377,"props":409,"children":410},{"style":384},[411],{"type":37,"value":412},"  SELECT\n",{"type":32,"tag":377,"props":414,"children":416},{"class":379,"line":415},3,[417],{"type":32,"tag":377,"props":418,"children":419},{"style":390},[420],{"type":37,"value":421},"    cohort_day,\n",{"type":32,"tag":377,"props":423,"children":425},{"class":379,"line":424},4,[426,432,437,442,447,451],{"type":32,"tag":377,"props":427,"children":429},{"style":428},"--shiki-default:#79B8FF",[430],{"type":37,"value":431},"    COUNT",{"type":32,"tag":377,"props":433,"children":434},{"style":390},[435],{"type":37,"value":436},"(",{"type":32,"tag":377,"props":438,"children":439},{"style":384},[440],{"type":37,"value":441},"DISTINCT",{"type":32,"tag":377,"props":443,"children":444},{"style":390},[445],{"type":37,"value":446}," user_id) ",{"type":32,"tag":377,"props":448,"children":449},{"style":384},[450],{"type":37,"value":398},{"type":32,"tag":377,"props":452,"children":453},{"style":390},[454],{"type":37,"value":455}," users,\n",{"type":32,"tag":377,"props":457,"children":459},{"class":379,"line":458},5,[460,465,470,474],{"type":32,"tag":377,"props":461,"children":462},{"style":428},[463],{"type":37,"value":464},"    AVG",{"type":32,"tag":377,"props":466,"children":467},{"style":390},[468],{"type":37,"value":469},"(session_count_7d) ",{"type":32,"tag":377,"props":471,"children":472},{"style":384},[473],{"type":37,"value":398},{"type":32,"tag":377,"props":475,"children":476},{"style":390},[477],{"type":37,"value":478}," avg_sessions,\n",{"type":32,"tag":377,"props":480,"children":482},{"class":379,"line":481},6,[483,487,492,496],{"type":32,"tag":377,"props":484,"children":485},{"style":428},[486],{"type":37,"value":464},{"type":32,"tag":377,"props":488,"children":489},{"style":390},[490],{"type":37,"value":491},"(hard_currency) ",{"type":32,"tag":377,"props":493,"children":494},{"style":384},[495],{"type":37,"value":398},{"type":32,"tag":377,"props":497,"children":498},{"style":390},[499],{"type":37,"value":500}," avg_currency\n",{"type":32,"tag":377,"props":502,"children":504},{"class":379,"line":503},7,[505,510],{"type":32,"tag":377,"props":506,"children":507},{"style":384},[508],{"type":37,"value":509},"  FROM",{"type":32,"tag":377,"props":511,"children":512},{"style":390},[513],{"type":37,"value":514}," user_metrics\n",{"type":32,"tag":377,"props":516,"children":517},{"class":379,"line":26},[518,523,528,533,538,543],{"type":32,"tag":377,"props":519,"children":520},{"style":384},[521],{"type":37,"value":522},"  WHERE",{"type":32,"tag":377,"props":524,"children":525},{"style":390},[526],{"type":37,"value":527}," last_session ",{"type":32,"tag":377,"props":529,"children":530},{"style":384},[531],{"type":37,"value":532},">=",{"type":32,"tag":377,"props":534,"children":535},{"style":390},[536],{"type":37,"value":537}," CURRENT_DATE ",{"type":32,"tag":377,"props":539,"children":540},{"style":384},[541],{"type":37,"value":542},"-",{"type":32,"tag":377,"props":544,"children":545},{"style":428},[546],{"type":37,"value":547}," 7\n",{"type":32,"tag":377,"props":549,"children":551},{"class":379,"line":550},9,[552,557],{"type":32,"tag":377,"props":553,"children":554},{"style":384},[555],{"type":37,"value":556},"  GROUP BY",{"type":32,"tag":377,"props":558,"children":559},{"style":390},[560],{"type":37,"value":561}," cohort_day\n",{"type":32,"tag":377,"props":563,"children":565},{"class":379,"line":564},10,[566],{"type":32,"tag":377,"props":567,"children":568},{"style":390},[569],{"type":37,"value":570},"),\n",{"type":32,"tag":377,"props":572,"children":574},{"class":379,"line":573},11,[575,580,584],{"type":32,"tag":377,"props":576,"children":577},{"style":390},[578],{"type":37,"value":579},"event_candidates ",{"type":32,"tag":377,"props":581,"children":582},{"style":384},[583],{"type":37,"value":398},{"type":32,"tag":377,"props":585,"children":586},{"style":390},[587],{"type":37,"value":403},{"type":32,"tag":377,"props":589,"children":591},{"class":379,"line":590},12,[592],{"type":32,"tag":377,"props":593,"children":594},{"style":384},[595],{"type":37,"value":412},{"type":32,"tag":377,"props":597,"children":599},{"class":379,"line":598},13,[600],{"type":32,"tag":377,"props":601,"children":602},{"style":390},[603],{"type":37,"value":604},"    event_id,\n",{"type":32,"tag":377,"props":606,"children":608},{"class":379,"line":607},14,[609],{"type":32,"tag":377,"props":610,"children":611},{"style":390},[612],{"type":37,"value":613},"    event_type,\n",{"type":32,"tag":377,"props":615,"children":617},{"class":379,"line":616},15,[618],{"type":32,"tag":377,"props":619,"children":620},{"style":390},[621],{"type":37,"value":622},"    duration,\n",{"type":32,"tag":377,"props":624,"children":626},{"class":379,"line":625},16,[627],{"type":32,"tag":377,"props":628,"children":629},{"style":390},[630],{"type":37,"value":631},"    cooldown_min,\n",{"type":32,"tag":377,"props":633,"children":635},{"class":379,"line":634},17,[636],{"type":32,"tag":377,"props":637,"children":638},{"style":390},[639],{"type":37,"value":640},"    target_cohort_min,\n",{"type":32,"tag":377,"props":642,"children":644},{"class":379,"line":643},18,[645],{"type":32,"tag":377,"props":646,"children":647},{"style":390},[648],{"type":37,"value":649},"    target_cohort_max,\n",{"type":32,"tag":377,"props":651,"children":653},{"class":379,"line":652},19,[654],{"type":32,"tag":377,"props":655,"children":656},{"style":390},[657],{"type":37,"value":658},"    monetization_flag,\n",{"type":32,"tag":377,"props":660,"children":662},{"class":379,"line":661},20,[663,668,673,679,684,688],{"type":32,"tag":377,"props":664,"children":665},{"style":428},[666],{"type":37,"value":667},"    COALESCE",{"type":32,"tag":377,"props":669,"children":670},{"style":390},[671],{"type":37,"value":672},"(last_run_date, ",{"type":32,"tag":377,"props":674,"children":676},{"style":675},"--shiki-default:#9ECBFF",[677],{"type":37,"value":678},"'2020-01-01'",{"type":32,"tag":377,"props":680,"children":681},{"style":390},[682],{"type":37,"value":683},") ",{"type":32,"tag":377,"props":685,"children":686},{"style":384},[687],{"type":37,"value":398},{"type":32,"tag":377,"props":689,"children":690},{"style":390},[691],{"type":37,"value":692}," last_run\n",{"type":32,"tag":377,"props":694,"children":696},{"class":379,"line":695},21,[697,701],{"type":32,"tag":377,"props":698,"children":699},{"style":384},[700],{"type":37,"value":509},{"type":32,"tag":377,"props":702,"children":703},{"style":390},[704],{"type":37,"value":705}," live_ops_events\n",{"type":32,"tag":377,"props":707,"children":709},{"class":379,"line":708},22,[710],{"type":32,"tag":377,"props":711,"children":712},{"style":384},[713],{"type":37,"value":714},"  WHERE\n",{"type":32,"tag":377,"props":716,"children":718},{"class":379,"line":717},23,[719,724,728,733,737,741,745,749],{"type":32,"tag":377,"props":720,"children":721},{"style":390},[722],{"type":37,"value":723},"    CURRENT_DATE ",{"type":32,"tag":377,"props":725,"children":726},{"style":384},[727],{"type":37,"value":542},{"type":32,"tag":377,"props":729,"children":730},{"style":428},[731],{"type":37,"value":732}," COALESCE",{"type":32,"tag":377,"props":734,"children":735},{"style":390},[736],{"type":37,"value":672},{"type":32,"tag":377,"props":738,"children":739},{"style":675},[740],{"type":37,"value":678},{"type":32,"tag":377,"props":742,"children":743},{"style":390},[744],{"type":37,"value":683},{"type":32,"tag":377,"props":746,"children":747},{"style":384},[748],{"type":37,"value":532},{"type":32,"tag":377,"props":750,"children":751},{"style":390},[752],{"type":37,"value":753}," cooldown_min\n",{"type":32,"tag":377,"props":755,"children":757},{"class":379,"line":756},24,[758],{"type":32,"tag":377,"props":759,"children":760},{"style":390},[761],{"type":37,"value":762},")\n",{"type":32,"tag":377,"props":764,"children":766},{"class":379,"line":765},25,[767],{"type":32,"tag":377,"props":768,"children":769},{"style":384},[770],{"type":37,"value":771},"SELECT\n",{"type":32,"tag":377,"props":773,"children":775},{"class":379,"line":774},26,[776,781,786,791],{"type":32,"tag":377,"props":777,"children":778},{"style":428},[779],{"type":37,"value":780},"  ec",{"type":32,"tag":377,"props":782,"children":783},{"style":390},[784],{"type":37,"value":785},".",{"type":32,"tag":377,"props":787,"children":788},{"style":428},[789],{"type":37,"value":790},"event_id",{"type":32,"tag":377,"props":792,"children":793},{"style":390},[794],{"type":37,"value":795},",\n",{"type":32,"tag":377,"props":797,"children":799},{"class":379,"line":798},27,[800,804,808,812],{"type":32,"tag":377,"props":801,"children":802},{"style":428},[803],{"type":37,"value":780},{"type":32,"tag":377,"props":805,"children":806},{"style":390},[807],{"type":37,"value":785},{"type":32,"tag":377,"props":809,"children":810},{"style":428},[811],{"type":37,"value":334},{"type":32,"tag":377,"props":813,"children":814},{"style":390},[815],{"type":37,"value":795},{"type":32,"tag":377,"props":817,"children":819},{"class":379,"line":818},28,[820,824,828,832],{"type":32,"tag":377,"props":821,"children":822},{"style":428},[823],{"type":37,"value":780},{"type":32,"tag":377,"props":825,"children":826},{"style":390},[827],{"type":37,"value":785},{"type":32,"tag":377,"props":829,"children":830},{"style":428},[831],{"type":37,"value":342},{"type":32,"tag":377,"props":833,"children":834},{"style":390},[835],{"type":37,"value":795},{"type":32,"tag":377,"props":837,"children":839},{"class":379,"line":838},29,[840,845,849,854,858,863,867,871],{"type":32,"tag":377,"props":841,"children":842},{"style":428},[843],{"type":37,"value":844},"  SUM",{"type":32,"tag":377,"props":846,"children":847},{"style":390},[848],{"type":37,"value":436},{"type":32,"tag":377,"props":850,"children":851},{"style":428},[852],{"type":37,"value":853},"cs",{"type":32,"tag":377,"props":855,"children":856},{"style":390},[857],{"type":37,"value":785},{"type":32,"tag":377,"props":859,"children":860},{"style":428},[861],{"type":37,"value":862},"users",{"type":32,"tag":377,"props":864,"children":865},{"style":390},[866],{"type":37,"value":683},{"type":32,"tag":377,"props":868,"children":869},{"style":384},[870],{"type":37,"value":398},{"type":32,"tag":377,"props":872,"children":873},{"style":390},[874],{"type":37,"value":875}," eligible_users,\n",{"type":32,"tag":377,"props":877,"children":879},{"class":379,"line":878},30,[880,885,889,893,897,902,906,910],{"type":32,"tag":377,"props":881,"children":882},{"style":428},[883],{"type":37,"value":884},"  AVG",{"type":32,"tag":377,"props":886,"children":887},{"style":390},[888],{"type":37,"value":436},{"type":32,"tag":377,"props":890,"children":891},{"style":428},[892],{"type":37,"value":853},{"type":32,"tag":377,"props":894,"children":895},{"style":390},[896],{"type":37,"value":785},{"type":32,"tag":377,"props":898,"children":899},{"style":428},[900],{"type":37,"value":901},"avg_sessions",{"type":32,"tag":377,"props":903,"children":904},{"style":390},[905],{"type":37,"value":683},{"type":32,"tag":377,"props":907,"children":908},{"style":384},[909],{"type":37,"value":398},{"type":32,"tag":377,"props":911,"children":912},{"style":390},[913],{"type":37,"value":914}," cohort_engagement,\n",{"type":32,"tag":377,"props":916,"children":918},{"class":379,"line":917},31,[919,923,927,931,935,940,944,948],{"type":32,"tag":377,"props":920,"children":921},{"style":428},[922],{"type":37,"value":884},{"type":32,"tag":377,"props":924,"children":925},{"style":390},[926],{"type":37,"value":436},{"type":32,"tag":377,"props":928,"children":929},{"style":428},[930],{"type":37,"value":853},{"type":32,"tag":377,"props":932,"children":933},{"style":390},[934],{"type":37,"value":785},{"type":32,"tag":377,"props":936,"children":937},{"style":428},[938],{"type":37,"value":939},"avg_currency",{"type":32,"tag":377,"props":941,"children":942},{"style":390},[943],{"type":37,"value":683},{"type":32,"tag":377,"props":945,"children":946},{"style":384},[947],{"type":37,"value":398},{"type":32,"tag":377,"props":949,"children":950},{"style":390},[951],{"type":37,"value":952}," cohort_wealth\n",{"type":32,"tag":377,"props":954,"children":956},{"class":379,"line":955},32,[957,962],{"type":32,"tag":377,"props":958,"children":959},{"style":384},[960],{"type":37,"value":961},"FROM",{"type":32,"tag":377,"props":963,"children":964},{"style":390},[965],{"type":37,"value":966}," event_candidates ec\n",{"type":32,"tag":377,"props":968,"children":970},{"class":379,"line":969},33,[971,976],{"type":32,"tag":377,"props":972,"children":973},{"style":384},[974],{"type":37,"value":975},"JOIN",{"type":32,"tag":377,"props":977,"children":978},{"style":390},[979],{"type":37,"value":980}," cohort_state cs\n",{"type":32,"tag":377,"props":982,"children":984},{"class":379,"line":983},34,[985,990,995,999,1004,1009,1014,1018,1023,1028,1032,1036],{"type":32,"tag":377,"props":986,"children":987},{"style":384},[988],{"type":37,"value":989},"  ON",{"type":32,"tag":377,"props":991,"children":992},{"style":428},[993],{"type":37,"value":994}," cs",{"type":32,"tag":377,"props":996,"children":997},{"style":390},[998],{"type":37,"value":785},{"type":32,"tag":377,"props":1000,"children":1001},{"style":428},[1002],{"type":37,"value":1003},"cohort_day",{"type":32,"tag":377,"props":1005,"children":1006},{"style":384},[1007],{"type":37,"value":1008}," BETWEEN",{"type":32,"tag":377,"props":1010,"children":1011},{"style":428},[1012],{"type":37,"value":1013}," ec",{"type":32,"tag":377,"props":1015,"children":1016},{"style":390},[1017],{"type":37,"value":785},{"type":32,"tag":377,"props":1019,"children":1020},{"style":428},[1021],{"type":37,"value":1022},"target_cohort_min",{"type":32,"tag":377,"props":1024,"children":1025},{"style":384},[1026],{"type":37,"value":1027}," AND",{"type":32,"tag":377,"props":1029,"children":1030},{"style":428},[1031],{"type":37,"value":1013},{"type":32,"tag":377,"props":1033,"children":1034},{"style":390},[1035],{"type":37,"value":785},{"type":32,"tag":377,"props":1037,"children":1038},{"style":428},[1039],{"type":37,"value":1040},"target_cohort_max\n",{"type":32,"tag":377,"props":1042,"children":1044},{"class":379,"line":1043},35,[1045],{"type":32,"tag":377,"props":1046,"children":1047},{"style":384},[1048],{"type":37,"value":1049},"WHERE\n",{"type":32,"tag":377,"props":1051,"children":1053},{"class":379,"line":1052},36,[1054,1059,1064,1068,1072,1077,1082,1087,1091,1095,1099,1104,1109],{"type":32,"tag":377,"props":1055,"children":1056},{"style":390},[1057],{"type":37,"value":1058},"  (",{"type":32,"tag":377,"props":1060,"children":1061},{"style":428},[1062],{"type":37,"value":1063},"ec",{"type":32,"tag":377,"props":1065,"children":1066},{"style":390},[1067],{"type":37,"value":785},{"type":32,"tag":377,"props":1069,"children":1070},{"style":428},[1071],{"type":37,"value":363},{"type":32,"tag":377,"props":1073,"children":1074},{"style":384},[1075],{"type":37,"value":1076}," =",{"type":32,"tag":377,"props":1078,"children":1079},{"style":428},[1080],{"type":37,"value":1081}," 0",{"type":32,"tag":377,"props":1083,"children":1084},{"style":384},[1085],{"type":37,"value":1086}," OR",{"type":32,"tag":377,"props":1088,"children":1089},{"style":428},[1090],{"type":37,"value":994},{"type":32,"tag":377,"props":1092,"children":1093},{"style":390},[1094],{"type":37,"value":785},{"type":32,"tag":377,"props":1096,"children":1097},{"style":428},[1098],{"type":37,"value":939},{"type":32,"tag":377,"props":1100,"children":1101},{"style":384},[1102],{"type":37,"value":1103}," >",{"type":32,"tag":377,"props":1105,"children":1106},{"style":428},[1107],{"type":37,"value":1108}," 500",{"type":32,"tag":377,"props":1110,"children":1111},{"style":390},[1112],{"type":37,"value":762},{"type":32,"tag":377,"props":1114,"children":1116},{"class":379,"line":1115},37,[1117,1122,1126,1130,1134,1138,1142,1146,1150,1154,1158,1162],{"type":32,"tag":377,"props":1118,"children":1119},{"style":384},[1120],{"type":37,"value":1121},"GROUP BY",{"type":32,"tag":377,"props":1123,"children":1124},{"style":428},[1125],{"type":37,"value":1013},{"type":32,"tag":377,"props":1127,"children":1128},{"style":390},[1129],{"type":37,"value":785},{"type":32,"tag":377,"props":1131,"children":1132},{"style":428},[1133],{"type":37,"value":790},{"type":32,"tag":377,"props":1135,"children":1136},{"style":390},[1137],{"type":37,"value":336},{"type":32,"tag":377,"props":1139,"children":1140},{"style":428},[1141],{"type":37,"value":1063},{"type":32,"tag":377,"props":1143,"children":1144},{"style":390},[1145],{"type":37,"value":785},{"type":32,"tag":377,"props":1147,"children":1148},{"style":428},[1149],{"type":37,"value":334},{"type":32,"tag":377,"props":1151,"children":1152},{"style":390},[1153],{"type":37,"value":336},{"type":32,"tag":377,"props":1155,"children":1156},{"style":428},[1157],{"type":37,"value":1063},{"type":32,"tag":377,"props":1159,"children":1160},{"style":390},[1161],{"type":37,"value":785},{"type":32,"tag":377,"props":1163,"children":1164},{"style":428},[1165],{"type":37,"value":1166},"duration\n",{"type":32,"tag":377,"props":1168,"children":1170},{"class":379,"line":1169},38,[1171,1176,1181],{"type":32,"tag":377,"props":1172,"children":1173},{"style":384},[1174],{"type":37,"value":1175},"ORDER BY",{"type":32,"tag":377,"props":1177,"children":1178},{"style":390},[1179],{"type":37,"value":1180}," cohort_engagement ",{"type":32,"tag":377,"props":1182,"children":1183},{"style":384},[1184],{"type":37,"value":1185},"DESC\n",{"type":32,"tag":377,"props":1187,"children":1189},{"class":379,"line":1188},39,[1190,1195,1200],{"type":32,"tag":377,"props":1191,"children":1192},{"style":384},[1193],{"type":37,"value":1194},"LIMIT",{"type":32,"tag":377,"props":1196,"children":1197},{"style":428},[1198],{"type":37,"value":1199}," 1",{"type":32,"tag":377,"props":1201,"children":1202},{"style":390},[1203],{"type":37,"value":1204},";\n",{"type":32,"tag":33,"props":1206,"children":1207},{},[1208],{"type":37,"value":1209},"Daily, this query picks the best event: cooldown passed, cohort range matches, and if monetization, players have currency. Output feeds directly to the event scheduler.",{"type":32,"tag":40,"props":1211,"children":1213},{"id":1212},"retention-engineering-linking-the-churn-model-to-the-event-loop",[1214],{"type":37,"value":1215},"Retention Engineering: Linking the Churn Model to the Event Loop",{"type":32,"tag":33,"props":1217,"children":1218},{},[1219,1221,1227],{"type":37,"value":1220},"Transform the calendar into a retention engineering system by integrating churn prediction into event selection. Calculate 7-day churn risk for every player (",{"type":32,"tag":57,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":37,"value":1226},"P(churn_D7)",{"type":37,"value":1228},"); trigger special events for high-risk cohorts.",{"type":32,"tag":33,"props":1230,"children":1231},{},[1232,1234,1240],{"type":37,"value":1233},"If a player's ",{"type":32,"tag":57,"props":1235,"children":1237},{"className":1236},[],[1238],{"type":37,"value":1239},"P(churn_D7) > 0.35",{"type":37,"value":1241}," and hasn't sessioned in 3 days, trigger a \"win-back event\"—lightweight (completable in 15 minutes), guaranteed rewards, no monetization. These events cut churn 18% (the headline figure comes from here). The churn model can be logistic regression, gradient boosting, or LSTM; the critical part is using the output as an event trigger condition.",{"type":32,"tag":33,"props":1243,"children":1244},{},[1245,1247,1252,1254,1259],{"type":37,"value":1246},"When linking the model to the loop, monitor ",{"type":32,"tag":293,"props":1248,"children":1249},{},[1250],{"type":37,"value":1251},"lift",{"type":37,"value":1253}," (post-event churn reduction) and ",{"type":32,"tag":293,"props":1255,"children":1256},{},[1257],{"type":37,"value":1258},"CAC-equivalent",{"type":37,"value":1260}," (win-back cost vs. new user acquisition cost). If lift falls below 15%, redesign the event. If CAC-equivalent exceeds 0.3 (win-back costs 30% of UA), kill the event.",{"type":32,"tag":71,"props":1262,"children":1264},{"id":1263},"event-participation-rate-prediction",[1265],{"type":37,"value":1266},"Event Participation Rate Prediction",{"type":32,"tag":33,"props":1268,"children":1269},{},[1270],{"type":37,"value":1271},"Predicting how many players will engage when an event launches is critical for capacity planning. A simple model:",{"type":32,"tag":367,"props":1273,"children":1275},{"code":1274},"participation_rate = base_rate × (1 + reward_multiplier) × (1 - fatigue_penalty)\n\nfatigue_penalty = max(0, (days_since_last_event - optimal_gap) \u002F optimal_gap × 0.15)\n",[1276],{"type":32,"tag":57,"props":1277,"children":1278},{"__ignoreMap":16},[1279],{"type":37,"value":1274},{"type":32,"tag":33,"props":1281,"children":1282},{},[1283,1285,1291,1293,1299,1301,1307],{"type":37,"value":1284},"Base participation is 32%, rewards +20% (",{"type":32,"tag":57,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":37,"value":1290},"reward_multiplier = 0.2",{"type":37,"value":1292},"), optimal gap is 10 days but event launches after 6 days: ",{"type":32,"tag":57,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":37,"value":1298},"fatigue_penalty = (10-6)\u002F10 × 0.15 = 0.06",{"type":37,"value":1300},". Final participation: ",{"type":32,"tag":57,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":37,"value":1306},"0.32 × 1.2 × 0.94 = 36.1%",{"type":37,"value":1308},". This forecast determines server load and content budget.",{"type":32,"tag":40,"props":1310,"children":1312},{"id":1311},"linking-off-game-growth-to-live-ops",[1313],{"type":37,"value":1314},"Linking Off-Game Growth to Live Ops",{"type":32,"tag":33,"props":1316,"children":1317},{},[1318,1320,1329],{"type":37,"value":1319},"Live ops isn't just an in-game retention tool; it's part of ",{"type":32,"tag":1321,"props":1322,"children":1326},"a",{"href":1323,"rel":1324},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Faso",[1325],"nofollow",[1327],{"type":37,"value":1328},"App Store Optimization",{"type":37,"value":1330}," and UA strategy. Seasonal events can be A\u002FB tested on custom product pages (CPP) and leveraged in Apple Search Ads creative. If a Ramadan event performs 42% higher in CPP conversion, shift 30% of UA budget to that event window.",{"type":32,"tag":33,"props":1332,"children":1333},{},[1334],{"type":37,"value":1335},"Sync the event calendar with UA timing: announce a major event 2 weeks ahead, add \"new content incoming\" messaging to campaigns. When the event launches, if D7 retention doesn't rise 5%+ vs. pre-event, event-UA alignment is broken. Revise onboarding integration—new users must hit the event within 24 hours, or UA spend is wasted.",{"type":32,"tag":1337,"props":1338,"children":1339},"hr",{},[],{"type":32,"tag":33,"props":1341,"children":1342},{},[1343],{"type":37,"value":1344},"Transform the live ops calendar into a retention engineering system: optimize cadence via Markov modeling, depth via branching architecture, monetization via cohort wealth distribution. Integrate churn prediction as an event trigger and feed it to a SQL-based scheduler. Churn drops 18%. Live ops becomes a loop that continuously reads cohort state and selects optimal events—not a calendar to fill. Studios skipping this hit their LTV ceiling.",{"type":32,"tag":1346,"props":1347,"children":1348},"style",{},[1349],{"type":37,"value":1350},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":415,"depth":415,"links":1352},[1353,1356,1357,1360,1361,1364],{"id":42,"depth":406,"text":45,"children":1354},[1355],{"id":73,"depth":415,"text":76},{"id":92,"depth":406,"text":95},{"id":273,"depth":406,"text":276,"children":1358},[1359],{"id":309,"depth":415,"text":312},{"id":320,"depth":406,"text":323},{"id":1212,"depth":406,"text":1215,"children":1362},[1363],{"id":1263,"depth":415,"text":1266},{"id":1311,"depth":406,"text":1314},"markdown","content:en:gaming:live-ops-calendar-retention-engineering-churn-18-percent.md","content","en\u002Fgaming\u002Flive-ops-calendar-retention-engineering-churn-18-percent.md","en\u002Fgaming\u002Flive-ops-calendar-retention-engineering-churn-18-percent","md",1785189889104]