# NPS волна 2026-08 — финальный анализ

> Финальный пересчёт волны, выполнен 2026-09-03. Волна закрыта — последний ответ 2026-09-01 14:28 MSK
> (окно затухания после reminder2, ушедшего 04:28 MSK 31.08, истекло к 03.09). Опубликовано на 4 поверхностях:
> локальный интерактивный отчёт (`nps/2026-08/report_final_2026-09-03.html`), Claude Artifact, этот сайт
> (`oscar-analytics.pages.dev/NPS/2026-08`) и таблица истории волн в `nps/README.md`.
>
> Промежуточный срез (31.08.2026, ответы по 12:00 MSK) — в архиве, см. `analysis_interim_2026-08-31.md`
> в репозитории `castings`.

**Данные:** `nps_responses` / `nps_send_logs`, wave `2026-08`. Тестовый `1049709700` исключён (единственный,
кто попал в выгрузку; остальные тестовые ID из CLAUDE.md в волне не встретились). Ковариаты (like rate,
режим онбординга, жалобы, стаж) взяты из `nps_send_logs.payload_json` стадии `initial` — снимок на момент
отправки, персистентный в БД (интерим ошибочно посчитал его безвозвратно потерянным вне сессии; на деле
`payload_json` хранит `lr_30d`, `reactions_30d`, `complaint_90d`, `onboarding_mode`, `stopwords_count`,
`tenure_days` для всех 1384 адресатов рамки — это позволило честно пересчитать Ф2.1/2.2/2.4 без
восстановления `analyze.py`).

---

## Сводка: интерим (31.08) → финал (03.09)

| | Интерим (12:00 MSK 31.08, 244 отв.) | **Финал (260 отв.)** |
|---|---|---|
| Ответов | 244 (отклик 17.6%) | **260 (отклик 18.8%, рамка 1384)** |
| NPS | +26.2 ±9.7 | **+25.4 ±9.5** |
| Средний балл | 7.88 ±0.28 | **7.87 ±0.28** |
| Промоутеры / нейтралы / критики | — | **120 (46.2%) / 86 (33.1%) / 54 (20.8%)** |
| Текстов закодировано | 90 | **95** |
| Группа релевантности | 62 чел. (25.4%), NPS −43.5 | **60 чел. (23.1%), NPS −45.0, балл 5.98** |
| Остальные | NPS +50.0 | **NPS +46.5, балл 8.43** |

Между промежуточным срезом (31.08, 12:00) и закрытием волны (01.09, 14:28 — последний ответ) добавилось
16 ответов. Ядро не сдвинулось за пределы своего ДИ: +25.4 внутри вилки интерима +23…+28.

---

## Ф1. Ядро — финал

**NPS = +25.4 ±9.5** (95% ДИ) · средний балл **7.87 ±0.28** · n = 260 (рамка 1384, отклик 18.8%)

| Категория | Кол-во | % |
|---|---|---|
| Промоутеры 9–10 | 120 | 46.2% |
| Нейтралы 7–8 | 86 | 33.1% |
| Критики 1–6 | 54 | 20.8% |

Распределение: 1:4 · 2:5 · 3:10 · 4:8 · 5:16 · 6:11 · 7:27 · 8:59 · 9:38 · 10:82

**Тренд:** −17.9 (ноя’24) → +44.3 (июл’25) → +37.1 (фев’26) → **+25.4 (авг’26, финал)**

Оговорка про несопоставимость с февралём инструментом (Google Forms/100% отклик vs TMA-страница/3 касания/
18.8% отклика) — без изменений, см. интерим и `survey_plan.md`.

## Ф2. Смещение выборки — пересчитано на финале

### 2.1 Отклик по бакетам like rate

| Бакет | Рамка | Ответили | Отклик | Средний балл |
|---|---|---|---|---|
| LR <10% | 117 | 36 | **30.8%** | **6.86** |
| LR 10–27% | 121 | 30 | 24.8% | 8.03 |
| LR 27–50% | 91 | 37 | 40.7% | 7.78 |
| LR >50% | 160 | 60 | 37.5% | 8.32 |
| нет данных (<5 реакций) | 895 | 97 | **10.8%** | 7.94 |

Вывод не изменился: самый недовольный бакет (LR<10%) отвечает на волне не реже, а немного чаще среднего
(30.8% против 18.8% по всей рамке), опасение «недовольные молчат» по-прежнему не подтверждается. Линия
разлома та же — 895 из 1384 (65% рамки) без реакций отвечают вдвое реже остальных бакетов, их балл (7.94)
на среднем уровне.

### 2.2 Перевзвешивание к рамке

| | NPS | Средний балл |
|---|---|---|
| Сырой (идёт в тренд) | **+25.4** | 7.87 |
| Взвешенный по бакетам LR | **+27.5** | 7.89 |

Взвешивание по-прежнему поднимает оценку, но разрыв сузился: интерим давал вилку +22.9…+27.5 (4.6 пункта),
финал — **+25.4…+27.5 (1.9 пункта)**. С ростом выборки сырая оценка сама подошла ближе к взвешенной.

### 2.3 Ранние против поздних (третья когорта досчитана)

| Когорта | n | Средний балл | NPS | Критиков |
|---|---|---|---|---|
| до reminder1 (до 28.08 03:33) | 120 | 7.83 ±0.38 | +20.8 | 20.8% |
| после reminder1 (28.08 03:33 – 31.08 04:28) | 75 | 7.91 ±0.55 | +30.7 | 21.3% |
| **после reminder2 (после 31.08 04:28)** | **65** | **7.89 ±0.58** | **+27.7** | **20.0%** |

Это и была задача Ф2.3 в follow-up: интерим закрылся с 15 «дожатыми» (балл 6.87, ДИ ±1.31, «сигнала нет»).
На финале в третьей когорте **65 человек** — выборка выросла в 4.3 раза, ДИ сузился вдвое (±0.58). Балл и
NPS третьей когорты практически совпадают с первыми двумя (7.89 против 7.83/7.91, +27.7 против +20.8/+30.7,
доля критиков 20.0% — самая низкая из трёх). **Вывод интерима подтверждён на полной выборке:** дожатые
вторым напоминанием отвечают не хуже добровольных. Ранний недосчёт был исключительно про размер выборки, не
про направление эффекта.

### 2.4 Ковариаты: рамка против ответивших

| Признак | Рамка | Ответившие | Δ |
|---|---|---|---|
| Жаловались в поддержку за 90 дн. | 59.1% (n=1384) | 62.7% (n=260) | **+3.6 п.п.** |
| Режим `advanced` (среди известных) | 67.5% (n=1030) | 74.2% (n=213) | **+6.7 п.п.** |
| Есть стоп-слова | 31.7% | 35.8% | +4.1 п.п. |
| Стаж, медиана дней | 118 | 134.5 | +16.5 |

Средний балл: жаловавшиеся **7.64** (n=163) против не жаловавшихся **8.25** (n=97) — разрыв 0.61 балла,
на интериме был 0.63 (n=132/78). Направление не изменилось: смещение выборки — в сторону вовлечённых
(advanced, дольше стаж, чаще жаловались), а не в сторону молчаливо довольных. Разрывы по advanced-режиму и
стоп-словам на финале даже немного шире, чем на интериме (+6.7 п.п. вместо +5.0, +4.1 вместо +1.1) —
дополнительный аргумент против гипотезы «NPS завышен молчаливыми».

**Вывод Ф2 (финал):** все четыре проверки повторяют вывод интерима — ни одна не находит смещения,
завышающего NPS; три из четырёх продолжают указывать в обратную сторону. Честная вилка на финале —
**+25.4…+27.5** (уже интерима на 2.7 пункта за счёт роста n и закрытой третьей когорты).

## Ф3. О чём пишут — 95 текстов (было 80 на интериме, +10 к 12:00 31.08, +5 после)

Кодировка (`coding.py`) актуальна: сверка всех 95 telegram_id с текстовыми ответами (`q_improve` /
`q_score_reason`, непустые) против `CODES` — **расхождений нет**, новых незакодированных текстов не
осталось, дополнительная кодировка на финале не потребовалась.

| Тема | Упом. | % текстов | Ср. балл | из них критиков |
|---|---|---|---|---|
| **Не подходят кастинги (типаж/возраст/пол/жанр)** | **60** | **63.2%** | 5.98 | 27 |
| Мало кастингов, хотят больше | 11 | 11.6% | 5.27 | 5 |
| Присылаешь не все каналы | 11 | 11.6% | 7.27 | 1 |
| Фильтров не хватает / не понимаю как настроить | 6 | 6.3% | 6.33 | 2 |
| Запоздание: в других чатах уже есть | 5 | 5.3% | 5.20 | 4 |
| Дорого / цена подписки | 5 | 5.3% | 6.20 | 1 |
| Шум / не по теме | 5 | 5.3% | 4.80 | 3 |
| Нет результата: пользуюсь, работы нет | 4 | 4.2% | 5.50 | 3 |
| Фильтры и стоп-слова не срабатывают | 4 | 4.2% | **4.25** | 3 |
| Бесплатные проекты / актёр платит за участие | 3 | 3.2% | 4.00 | 2 |
| Спам, мошенники, непроверенные источники | 3 | 3.2% | 5.00 | 2 |
| Ставлю реакции — ничего не меняется | 2 | 2.1% | 7.50 | 0 |
| Закрытые каналы / ссылка не открывается | 2 | 2.1% | 4.00 | 2 |
| Повторы | 1 | 1.1% | 7.00 | 0 |
| Агрессивный маркетинг после отмены | 1 | 1.1% | 8.00 | 0 |
| **Лучше иметь личного агента / Оскар — альтернатива** (новая тема, финальный срез) | 1 | 1.1% | 6.00 | 1 |

### Цена вопроса релевантности — финал

| Группа | n | % всех ответивших | Ср. балл | NPS |
|---|---|---|---|---|
| Упомянули релевантность | 60 | 23.1% | 5.98 | **−45.0** |
| Не упомянули | 200 | 76.9% | 8.43 | **+46.5** |

Разрыв 2.45 балла. Если бы вся волна отвечала как «остальные», NPS был бы +46.5 вместо +25.4 —
**потолок роста +21.1 пункта** в одной теме (интерим оценивал +24 на 244 ответах; доля группы на финале
чуть ниже — 23.1% против 25.4% на интериме, — потолок сузился, но тема остаётся безусловным приоритетом №1).

Ранг тем не изменился: релевантность на первом месте с многократным отрывом (63.2% текстов против 11.6% у
двух тем на втором месте). Метрика плана («тема фильтрации — не первое место») не достигнута и на финале.

## Ф4. Сопоставление с churn — дополнено событиями 01–03.09

**Новые churn-события с 01.09 по 03.09** (`user_logs`, `action='sub_removed'`, дедуп по `telegram_id`,
branch — последний `sub_churn_reason_txt`/`sub_removed.user_msg` для этого пользователя в окне):

| Branch | Событий (01–03.09) |
|---|---|
| (пусто/не залогировано) | 14 |
| `5_pause` | 7 |
| `2_price` | 3 |
| `1_mismatch` | 2 |
| `4_spam` | 1 |
| `6_tech` | 1 |
| `declined_pay_other_card` | 1 |
| **Всего уникальных отмен** | **29** |

**Пересечение с NPS-ответами:** 5 из 29 отменивших в 01–03.09 отвечали на волну (было 3 на интериме за 25–31.08) —
два промоутера (балл 10 и 9), критик по теме relevance (балл 2, branch `5_pause`), нейтрал (балл 7) и критик по
теме coverage (балл 5, branch `2_price`); все отмены пришлись на неделю после ответа на опрос. Тот же паттерн
«высокий балл не удержал», что и на интериме: NPS измеряет удовлетворённость, а не намерение платить.
Идентификаторы пользователей — во внутреннем анализе (`nps/2026-08/analysis_final_2026-09-03.md`), не публикуются.

**Уходящие в опрос не приходят — окно расширено на 25.08–03.09:**

| Группа внутри рамки | n | Ответили на NPS |
|---|---|---|
| Отменили подписку за 25.08–03.09 | 77 | 9 — **11.7%** |
| Остальные | 1307 | 251 — **19.2%** |

Разрыв (11.7% против 19.2%) сохранился и на увеличенной выборке (77 против 36 на интериме) — направление то
же, интервалы по-прежнему не разнесены полностью, но зазор устойчивее статистически при более чем вдвое
большей группе уходящих. Вывод интерима держится: **NPS-волна закономерно недосчитывает уходящих**,
измерять их отдельно нужно через churn-flow, не через опрос.

**Матрица «распространённость (Ф3) × тяжесть (churn)» — не пересчитана целиком в рамках этого follow-up.** Скрипты
`f4_prep.py` / `f4_stats.py`, которыми интерим строил таблицу «66.2% текстов / 17.1% доля у уходящих / save
rate», жили в скрэтчпаде сессии 31.08 и оказались недоступны при финальном пересчёте. Восстановить полный
знаменатель матрицы (129 отмен за 22.07–31.08, разбитых по веткам `1_mismatch`…`7_tg_block`) без этих
скриптов значило бы писать методологию заново, а не пересчитывать по ней — риск разъехаться с интеримом на
классификации веток задним числом. Честная замена в этой публикации — свежий кусок за 01–03.09 (таблица выше)
как приращение к интеримовой матрице, а не её замена. **Если публикация требует обновлённую матрицу
целиком** — нужен отдельный проход через методологию `churn-report` skill на объединённом окне 22.07–03.09,
это отдельная задача, не часть этого follow-up.

## Что не изменилось / ограничения (переносятся из интерима без изменений)

- Сегменты `not_purchased` / `not_extended` не реализованы — не измерено.
- Смещение по признаку, которого нет в БД (молча раздражён), перевзвешиванием не ловится — Ф2 даёт нижнюю
  границу, не величину смещения.
- Телеметрия открытий (`survey_opened`) так и не реализована — воронка «доставлено → открыл» слепая.
- Артефакт `5_pause` (обнулённый `unsub_reason_txt`) остаётся нетронутым решением владельца 31.08 — влияет
  на сравнение тем «пауза» до/после 25.08, поправка обязательна при таком сравнении.

---

Промежуточный анализ той же волны (31.08.2026, до закрытия) — `analysis_interim_2026-08-31.md` в репозитории
`castings` (`nps/2026-08/`), не публикуется отдельно.
