В мобильном F2P оптимизация цены все еще выполняется по логике A/B-тестирования: две точки цены, 7–14 дней, выбирается победитель. Но когда conversion rate повышается с 2,8% до 3,1%, это действительно выигрыш или вы потеряли whale-сегмент и снизили общий LTV? Классический frequentist A/B-тест говорит «какой вариант победил», но не отвечает на вопрос «какую цену показать какому пользователю в какой момент». Байесовская оптимизация цены заполняет этот пробел — обновляя IAP-лестницу на основе posterior-распределения, вы можете одновременно оптимизировать conversion и сегмент-специфичный revenue.

Почему Frequentist A/B-тест недостаточен в F2P

Классический A/B-тест работает на двух предположениях: (1) поведение пользователя стабильно в течение теста, (2) выигравший вариант оптимален для всех сегментов. В F2P оба неверны. Поведение пользователя отличается в первые 72 часа, на 7-й день и на 30-й день — одна и та же цена показывает разную производительность в разных когортах retention. Пример: $4.99 starter pack имеет conversion 3,5%, вариант $9.99 — 2,8%. По классической логике A/B выигрывает $4.99. Однако анализ 30-дневного LTV показал, что вариант $9.99 в whale-сегменте (top 5% spender) генерирует на 42% более высокий lifetime spend. Frequentist-тест не видит эту динамику, потому что не делает posterior-оценку по сегментам.

Вторая проблема — фиксированная длительность теста. A/B-тест длится 14 дней, затем принимается решение, но на 14-й день вы может быть не достигли достаточной статистической мощности. При байесовском подходе posterior-распределение обновляется непрерывно — когда появляется достаточная уверенность, можно остановиться раньше, или, если результат неоднозначен, продлить тест. Это критично для F2P, потому что календарь live ops не ждет две недели — приходит новое событие, контекст pricing меняется, результат теста становится устаревшим.

Третья проблема — бинарная логика решения. Frequentist-тест говорит вам «A выиграл», но в F2P нет выигравшего варианта — правильная цена показывается правильному сегменту в правильное время. Байесовская оптимизация благодаря posterior-оценке дает оптимальный диапазон цен для каждого сегмента, что служит входом для динамического pricing engine.

Байесовский IAP-лестница тест: итеративная оптимизация через posterior-оценку

Байесовская оптимизация цены работает на трех уровнях: prior-распределение (предыдущие тестовые данные + доменные знания), функция правдоподобия (текущие данные conversion), posterior-распределение (произведение двух — обновленное убеждение). В IAP-тесте это применяется следующим образом:

Определение prior: у вас есть данные из предыдущих price-тестов — распределение conversion rate и revenue. Например, для $4.99 IAP ваш prior это Beta(120, 3800) — 120 conversions, 3800 impressions. Это базовая линия вашей игры. Если вы добавляете $6.99 в тест, установите prior на основе доменных знаний: при увеличении цены на 40% conversion обычно падает на 25–35% (эластичность -0.6 к -0.9). Ваш prior может быть Beta(80, 3840).

Обновление likelihood: тест начался, каждый день поступают новые данные о conversions. Байесовский фреймворк обновляет posterior каждый день. На 3-й день вариант $6.99 показал 45 conversions, 1200 impressions — likelihood это Beta(45, 1155). Posterior = prior × likelihood = Beta(125, 4995). Это дает вам текущую оценку conversion rate: 125/(125+4995) ≈ 2,44%. Важно: это не просто точечная оценка, а распределение — 95% credible interval 2,1%, 2,8%. То есть вероятность того, что conversion между 2,1% и 2,8%, составляет 95%.

Thompson Sampling для динамического распределения: в классическом A/B traffic распределяется 50–50. В байесовской оптимизации вы используете Thompson Sampling: для каждого impression берется выборка из posterior-распределения, показывается вариант с наибольшим ожидаемым revenue. Это позволяет по мере продвижения теста трафику переходить к лучше работающему варианту, но не дает 100% allocation — продолжает исследовать. В F2P это важно, потому что whale-сегмент мал, но высокой ценности, и если его отрезать рано, вы его потеряете.

Пример кода (Python + PyMC):

import pymc as pm
import numpy as np

# Prior: $4.99 IAP conversion
prior_alpha_499 = 120
prior_beta_499 = 3800

# $6.99 вариант — новый тест
conversions_699 = 45
impressions_699 = 1200

with pm.Model() as price_test:
    # Обновление posterior
    conv_rate_699 = pm.Beta('conv_rate_699', 
                             alpha=prior_alpha_499*0.7 + conversions_699,
                             beta=prior_beta_499*1.0 + (impressions_699 - conversions_699))
    
    # Ожидание revenue (цена IAP × conversion)
    expected_revenue = conv_rate_699 * 6.99
    
    # Sampling
    trace = pm.sample(2000, return_inferencedata=True)

# 95% credible interval
print(pm.summary(trace, var_names=['conv_rate_699']))

Этот подход дает вам: «на 3-й день conversion $6.99 составляет 2,1–2,8%, ожидаемый revenue $0.17 на пользователя» — по мере продолжения теста interval сужается.

Сегмент-специфичная IAP-лестница: оптимизация whale, dolphin, minnow

В F2P не все пользователи одинаково реагируют на одну цену. Если не делать posterior-оценку по сегментам, вы оптимизируете для среднего conversion, но теряете сегмент-специфичный revenue. Три основных сегмента:

Whale (top 5% spender): LTV $200+, количество IAP 8+, retention D30 85%+. Для этого сегмента чувствительность к цене низкая — если $9.99 IAP конвертирует на 15% меньше, но lifetime spend на 60% выше, это все равно выигрыш. Posterior-оценка здесь отвечает на вопрос: «$9.99 оптимален для whale-сегмента, или $14.99 дает более высокий LTV?» В течение теста вы отслеживаете conversion whale-когорты отдельно, posterior обновляется специфично для whale. Пример: общее conversion $9.99 это 2,8%, но для whale-сегмента 6,2% — для этого сегмента нужно тестировать более высокую цену.

Dolphin (middle 25% spender): LTV $20–50, количество IAP 2–4, retention D30 50–70%. Чувствительность к цене средняя. В dolphin-сегменте байесовский тест обычно находит оптимальный диапазон: между $4.99 и $6.99, какой дает более высокий ожидаемый revenue. Posterior-распределение здесь может быть бимодальным — некоторые dolphin ведут себя как whale (weekend spiker), некоторые смещаются к minnow. Требуется уточнение сегментации.

Minnow (остальные 70%): LTV <$10, большинство non-payer. Чувствительность к цене очень высока — даже между $2.99 и $4.99 conversion может измениться на 40%. В этом сегменте байесовский тест обычно показывает: самая низкая цена ($0.99–$1.99) обеспечивает максимум conversion, но общий revenue низкий. Стратегия: привлекайте minnow'ов первым IAP за $0.99 (impulse buy), затем направляйте на $4.99 лестницу.

Для сегмент-специфичной posterior-оценки используется hierarchical Bayesian model:

with pm.Model() as hierarchical_price:
    # Global conversion prior
    global_alpha = pm.Gamma('global_alpha', alpha=2, beta=0.1)
    global_beta = pm.Gamma('global_beta', alpha=2, beta=0.1)
    
    # Сегмент-специфичная conversion
    conv_whale = pm.Beta('conv_whale', alpha=global_alpha, beta=global_beta)
    conv_dolphin = pm.Beta('conv_dolphin', alpha=global_alpha, beta=global_beta)
    conv_minnow = pm.Beta('conv_minnow', alpha=global_alpha, beta=global_beta)
    
    # Likelihood (сегментные данные)
    whale_obs = pm.Binomial('whale_obs', n=200, p=conv_whale, observed=12)
    dolphin_obs = pm.Binomial('dolphin_obs', n=800, p=conv_dolphin, observed=24)
    minnow_obs = pm.Binomial('minnow_obs', n=3000, p=conv_minnow, observed=60)
    
    trace = pm.sample(3000)

Эта модель связывает whale, dolphin, minnow conversion'ы с глобальным prior — даже при малом размере выборки дает разумную оценку.

Длительность теста и stopping rule: решение через posterior probability

В классическом A/B длительность теста определяется заранее (14 дней, минимум 1000 conversions). В байесовской оптимизации stopping rule строится на posterior probability: «вероятность того, что вариант A лучше варианта B, превысила 95%?» Это динамическое остановку и дает ранний выигрыш, и снижает риск false positive.

Пример stopping rule: тест $4.99 vs $6.99 IAP. Каждый день posterior обновляется. На 5-й день рассчитывается posterior probability:

# Posterior samples
samples_499 = trace.posterior['conv_rate_499'].values.flatten()
samples_699 = trace.posterior['conv_rate_699'].values.flatten()

# Revenue сравнение (цена × conversion)
revenue_499 = samples_499 * 4.99
revenue_699 = samples_699 * 6.99

# Вероятность $6.99 лучше
prob_699_better = (revenue_699 > revenue_499).mean()
print(f"P($6.99 > $4.99) = {prob_699_better:.2%}")

На 5-й день P($6.99 > $4.99) = 73% — не решайте еще. На 9-й день 94% — все еще ниже порога 95%. На 12-й день 96% — остановите тест, $6.99 оптимален. Этот подход сэкономит вам 2–5 дней по сравнению с frequentist.

Минимальная длительность теста: даже если байесовский подход рекомендует ранее остановиться, в F2P запускайте минимум 7 дней — в первой неделе видны spike retention, поведение weekend spender, эффект события. Если остановитесь раньше, posterior будет смещенным.

Regret minimization: если вы используете Thompson Sampling, в течение теста вы даете трафик субоптимальному варианту (exploration). Regret = optimal revenue - actual revenue. Байесовский фреймворк минимизирует regret, потому что по мере обновления posterior exploration уменьшается, exploitation растет. За 14-дневный тест первые 5 дней это 30% regret, последние 5 дней это 5% regret — средний 15%. В классическом A/B средний regret 25–30%, потому что трафик постоянно распределяется 50–50.

Переход в production: dynamic pricing engine и continuous posterior refinement

Тест завершен, $6.99 выиграл — но работа не закончена. Настоящая сила байесовской оптимизации цены в том, что в production'е она непрерывно уточняет posterior. Результат теста — не статичная точка цены, а вход в динамический pricing engine.

Архитектура dynamic pricing engine: в каждой пользовательской сессии делается сегмент-оценка (LTV prediction, retention cohort, spending velocity). В зависимости от сегмента из posterior-распределения sample'ируется оптимальная цена. Пример: новый пользователь, D1 retention 80%, первый IAP еще впереди — prior minnow доминирует, sample'ируется из диапазона $0.99–$1.99. Тот же пользователь на D7