Первичная версия: стилометрия реплик, LSA и протокол экспериментов

This commit is contained in:
2026-10-24 01:17:36 +03:00
commit c390224500
52 changed files with 10099 additions and 0 deletions

View File

@@ -0,0 +1,894 @@
# Метрики и классификаторы: методическое описание
Документ предназначен для отчёта и презентации. Он объясняет, что показывает
каждая метрика, как она вычисляется, как интерпретировать значения и чем
отличаются классификаторы. Аудитория может не знать деталей машинного
обучения, но предполагается, что базовые понятия выборки, признака и класса
знакомы.
Обозначения:
- \(n\) — число объектов (реплик) в выборке;
- \(C\) — число классов (в основном эксперименте \(C=34\));
- \(y_i\) — истинный класс объекта \(i\);
- \(\hat y_i\) — предсказанный класс;
- \(c\) — индекс класса;
- \(n_c\) — число объектов класса \(c\);
- \(\hat p_{i,c}\) — вероятность, которую модель приписывает объекту \(i\)
и классу \(c\).
---
## 1. Постановка задачи
Решается задача **многоклассовой классификации с одним правильным ответом**:
каждая реплика относится ровно к одному персонажу. Модель получает вектор
стилометрических признаков и должна выбрать один из 34 классов.
Особенности, которые влияют на выбор метрик:
1. **Дисбаланс классов.** Число реплик изменяется от 15 до 139. Модель, которая
всегда предсказывает самый частый класс, может иметь заметную долю
правильных ответов, но бесполезна для редких персонажей.
2. **Много классов.** Случайное угадывание даёт около \(1/34 \approx 2{,}9\%\).
Поэтому полезны top-3 и top-5.
3. **Короткие тексты.** Один объект — реплика длиной около 19 слов. Оценки
качества будут ниже, чем на длинных документах; это ожидаемо.
4. **Один автор.** Задача измеряет различимость речевых масок, а не авторскую
атрибуцию.
---
## 2. Матрица ошибок
**Матрица ошибок** (confusion matrix) — таблица \(C \times C\), где строка
соответствует истинному классу, столбец — предсказанному. Элемент \(m_{ab}\) —
число объектов класса \(a\), которые модель отнесла к классу \(b\).
Для одного класса \(c\) удобно рассматривать задачу «класс \(c\) против
остальных»:
| | Предсказан \(c\) | Предсказан не \(c\) |
|---|---:|---:|
| Истинно \(c\) | \(TP_c\) (истинно положительные) | \(FN_c\) (ложно отрицательные) |
| Истинно не \(c\) | \(FP_c\) (ложно положительные) | \(TN_c\) (истинно отрицательные) |
Диагональ матрицы — правильные ответы. Вне диагонали — ошибки. По матрице
видно не только «сколько ошибок», но и **какие персонажи перепутываются**.
Это важно для содержательной интерпретации: например, ошибки между детьми
(Jas и Vincent) или между нелюдьми (Krobus, Dwarf, Wizard) могут отражать
сходство их речевых масок.
---
## 3. Метрики для одного класса
### 3.1. Точность (precision)
\[
P_c = \frac{TP_c}{TP_c + FP_c}.
\]
Показывает, какая доля объектов, которые модель назвала классом \(c\),
действительно принадлежит этому классу. Высокая точность означает мало
ложных срабатываний.
Пример: если модель 10 раз предсказала Abigail, и 7 раз правильно, точность
равна \(7/10 = 0{,}7\).
### 3.2. Полнота (recall)
\[
R_c = \frac{TP_c}{TP_c + FN_c}.
\]
Показывает, какую долю объектов класса \(c\) модель нашла. Высокая полнота
означает мало пропусков.
Пример: если в выборке 20 реплик Abigail, и модель правильно нашла 12,
полнота равна \(12/20 = 0{,}6\).
### 3.3. F-мера (F1)
\[
F1_c = \frac{2 P_c R_c}{P_c + R_c}.
\]
Гармоническое среднее точности и полноты. Почему гармоническое, а не
арифметическое: оно сильнее наказывает за низкое значение любой из двух
метрик. Если точность 1,0, а полнота 0,1, арифметическое среднее 0,55, а
F-мера — около 0,18. Это соответствует интуиции: модель, которая находит
только десятую часть класса, нельзя считать хорошей.
F-мера полезна, когда важно и не пропускать объекты класса, и не приписывать
к нему чужие. В нашей задаче это естественная метрика для каждого персонажа.
### 3.4. Поддержка (support)
\(n_c\) — число истинных объектов класса \(c\) в выборке. Support нужен,
чтобы понимать, насколько надёжна оценка: F-мера по классу с 15 объектами
имеет гораздо больший разброс, чем по классу с 139 объектами.
---
## 4. Способы усреднения метрик
### 4.1. Macro-усреднение
\[
\text{macro-F1} = \frac{1}{C}\sum_{c=1}^{C} F1_c.
\]
Каждый класс получает одинаковый вес независимо от числа объектов. Это
**основная метрика** в нашей задаче, потому что исследовательский вопрос
касается всех 34 персонажей, включая редких.
Недостаток: редкий класс с 15 репликами влияет на итог так же сильно, как
класс с 139 репликами; поэтому macro-F1 может сильно колебаться между
блоками перекрёстной проверки.
### 4.2. Взвешенное усреднение
\[
\text{weighted-F1} = \sum_{c=1}^{C} \frac{n_c}{n} F1_c.
\]
Каждый класс взвешен по числу объектов. Метрика ближе к качеству на частых
классах; её полезно приводить как дополнительную, но не как основную.
### 4.3. Микро-усреднение
Сначала суммируются \(TP\), \(FP\), \(FN\) по всем классам, затем считается
общая F-мера. В задаче с одним правильным ответом micro-F1 **совпадает с
долей правильных ответов** (accuracy). Поэтому отдельно его считать не нужно,
но можно указать для полноты.
### 4.4. Пример влияния усреднения
Пусть модель хорошо различает Abigail, Alex и Haley, но почти не различает
редких персонажей. Тогда:
- доля правильных ответов и взвешенная F-мера будут относительно высокими;
- macro-F1 будет заметно ниже;
- F-мера по классам покажет, какие именно классы провалились.
Именно поэтому в отчёте нужны macro-F1 **и** отчёт по классам.
---
## 5. Основные метрики
### 5.1. Доля правильных ответов (accuracy)
\[
\text{Accuracy} = \frac{1}{n}\sum_{i=1}^{n} \mathbf{1}[y_i = \hat y_i].
\]
Доля объектов, для которых предсказание совпало с истинным классом.
Плюсы: проста и интуитивна. Минусы: при дисбалансе может вводить в
заблуждение. Пример из наших прогонов: модель `char + multinomial_nb` имеет
долю правильных ответов около 9,7%, но сбалансированная доля правильных
ответов 4,7% и macro-F1 0,028, потому что она часто предсказывает частые
классы и почти не находит редкие.
Случайный уровень: \(1/34 \approx 2{,}9\%\). Модель, всегда предсказывающая
самый частый класс, даёт около \(139/2005 \approx 6{,}9\%\) правильных
ответов, но
macro-F1 около 0,004.
### 5.2. Сбалансированная доля правильных ответов (balanced accuracy)
\[
\text{BalancedAccuracy} = \frac{1}{C}\sum_{c=1}^{C} R_c.
\]
Средняя полнота по классам. Каждый класс получает одинаковый вес, поэтому
метрика устойчива к дисбалансу. Случайный уровень \(1/C\).
Плюс: хорошо показывает, находит ли модель редкие классы. Минус: не учитывает
точность (ложные срабатывания), поэтому её нужно дополнять macro-F1 и MCC.
### 5.3. Macro-F1
Основная метрика. Формула приведена выше. Интерпретация:
- 0 — модель не находит ни одного класса;
- \(1/C \approx 0{,}029\) — уровень случайного угадывания;
- 0,10–0,20 — слабый, но заметный сигнал;
- 0,30–0,50 — умеренное качество;
- выше 0,50 — сильный результат для 34 классов и коротких реплик.
Пороговые значения условны: они зависят от числа классов, длины текста и
сложности задачи. В отчёте лучше сравнивать с базовой моделью и доверительными
интервалами, а не с абстрактной шкалой.
### 5.4. Коэффициент корреляции Мэтьюса (MCC)
Для двух классов:
\[
\text{MCC} = \frac{TP \cdot TN - FP \cdot FN}
{\sqrt{(TP+FP)(TP+FN)(TN+FP)(TN+FN)}}.
\]
Для многих классов используется обобщение через ковариацию матриц истинных и
предсказанных индикаторов (так реализовано в scikit-learn). MCC принимает
значения от \(-1\) до \(1\):
- \(1\) — идеальные предсказания;
- \(0\) — уровень случайного угадывания;
- \(-1\) — полная инверсия классов.
MCC удобен тем, что учитывает все четыре клетки матрицы ошибок и устойчив к
дисбалансу. В отличие от F-меры, он одинаково штрафует за ложные
срабатывания и пропуски.
### 5.5. Каппа Коэна (Cohen's kappa)
\[
\kappa = \frac{p_o - p_e}{1 - p_e},
\]
где \(p_o\) — наблюдаемая доля согласия (accuracy), \(p_e\) — ожидаемая доля
согласия при случайном предсказании с учётом распределения классов.
Интерпретация:
- \(\kappa = 0\) — согласие не лучше случайного;
- \(\kappa = 1\) — полное согласие;
- отрицательные значения — хуже случайного.
Полезна как дополнение к доле правильных ответов: показывает, насколько модель превосходит
случайное угадывание с тем же распределением классов. При сильном дисбалансе
каппа может быть нестабильной; используйте вместе с macro-F1.
### 5.6. Top-k
\[
\text{Top-}k = \frac{1}{n}\sum_{i=1}^{n}
\mathbf{1}\left[y_i \in \text{Top-}k(\hat p_{i,\cdot})\right].
\]
Доля объектов, для которых истинный класс попал в \(k\) наиболее вероятных
(или наиболее высоко оценённых) классов.
При 34 классах top-1 может быть низким, но top-3 и top-5 показывают, что
модель «чувствует» правильную область. Случайный уровень:
- top-3: \(3/34 \approx 8{,}8\%\);
- top-5: \(5/34 \approx 14{,}7\%\).
Top-k особенно полезен для вероятностных моделей и моделей с решающей
функцией. Для моделей без вероятностей ранжирование строится по значению
решающей функции; это не калиброванные вероятности, но порядок классов
корректен.
### 5.7. Логарифмическая потеря (log loss)
\[
\text{LogLoss} = -\frac{1}{n}\sum_{i=1}^{n} \log \hat p_{i,y_i}.
\]
Оценивает качество вероятностей, а не только правильность ответа. Если модель
уверена в неправильном классе, штраф растёт логарифмически.
Случайный уровень для 34 классов: \(\ln 34 \approx 3{,}53\). Значения ниже
лучше. В предварительных прогонах значения различаются: около 3,1 для
объединённого набора с n-граммами и около 7,3 для одних ручных признаков.
Чем ближе значение к 3,53, тем лучше калибровка; значения существенно выше
означают, что модель часто уверена, но ошибается. Это не обязательно плохо
для классификации, но важно для вероятностных выводов.
Log loss определён только для моделей, выдающих вероятности. Для `linear_svc`
он не считается.
### 5.8. Оценка Брайера (Brier score)
Для многоклассовой задачи:
\[
\text{Brier} = \frac{1}{n}\sum_{i=1}^{n}\sum_{c=1}^{C}
\left(\hat p_{i,c} - \mathbf{1}[y_i = c]\right)^2.
\]
Средний квадрат отклонения предсказанных вероятностей от вектора с единицей
в позиции истинного класса. Чем меньше, тем лучше. В отличие от log loss, Brier менее
чувствителен к редким уверенным ошибкам, но тоже оценивает калибровку.
Ориентир: для равномерного случайного распределения по 34 классам
\(\text{Brier} \approx (C-1)/C \approx 0{,}971\). Значения выше этого
означают, что модель хуже равномерного случайного распределения по качеству
вероятностей.
### 5.9. Матрица ошибок и отчёт по классам
Матрица ошибок — не одна метрика, а инструмент анализа. В отчёте полезны:
- **абсолютная матрица** — сколько реплик перепутано;
- **нормированная по строкам матрица** — какая доля истинного класса ушла в
каждый предсказанный;
- **самые частые пары ошибок** — какие классы чаще всего перепутываются.
Отчёт по классам содержит точность, полноту, F-меру и support для каждого
персонажа. Именно он показывает, что средние метрики могут скрывать провал
редких классов.
---
## 6. Метрики верификации «свой/чужой»
В верификации задача формулируется иначе: для тестовой реплики нужно решить,
принадлежит ли она тому же персонажу, что и эталонный центроид. Это бинарная
задача; положительный класс — «свой», отрицательный — «чужой».
### 6.1. ROC-AUC
Площадь под ROC-кривой. Интерпретация: вероятность того, что случайно взятый
положительный объект получил более высокую оценку, чем случайно взятый
отрицательный.
- 0,5 — случайное ранжирование;
- 1,0 — идеальное разделение;
- ниже 0,5 — модель систематически ставит чужие объекты выше своих.
ROC-AUC не зависит от выбранного порога, поэтому удобна для сравнения
способов построения оценок.
### 6.2. Равная ошибка (EER)
Порог, при котором доля ложных принятий (FPR) равна доле ложных отклонений
(FNR). Чем меньше EER, тем лучше. EER удобна как одна точка на ROC-кривой,
но не заменяет всю кривую.
### 6.3. TAR@FAR
Доля истинных принятий при фиксированной доле ложных принятий. Например,
TAR@FAR=1% показывает, какую долю «своих» можно принять, если разрешить не
более 1% ложных принятий. В практических системах это часто важнее, чем EER.
---
## 7. Доверительные интервалы и статистическая значимость
### 7.1. Зачем нужны интервалы
Оценка качества по одной выборке — случайная величина. Если повторить
разбиение, macro-F1 изменится. Поэтому в отчёте нужны не только точечные
значения, но и интервалы.
### 7.2. Бутстрэп (bootstrap)
Алгоритм:
1. Из \(n\) объектов случайно с возвращением выбираются \(n\) объектов.
2. На этой выборке считается метрика.
3. Шаги 1–2 повторяются \(B\) раз (обычно 1000).
4. Берутся 2,5-й и 97,5-й процентили — это 95% доверительный интервал.
Плюс: не требует предположений о распределении метрики. Минус: объекты
считаются независимыми; если реплики внутри сцен коррелируют, интервал может
быть слишком узким.
### 7.3. Критерий Мак-Немара
Сравнивает две модели на одних и тех же объектах. Пусть:
- \(b\) — число объектов, где модель A правильна, а B ошибается;
- \(c\) — число объектов, где A ошибается, а B правильна.
При нулевой гипотезе «модели одинаковы» \(b\) и \(c\) — результаты
\(b+c\) испытаний с вероятностью \(1/2\). Точный двусторонний критерий
использует биномиальное распределение. Если \(b+c\) мало, критерий
консервативен.
### 7.4. Критерий Уилкоксона
Парный непараметрический критерий для двух наборов оценок (например, macro-F1
по блокам перекрёстной проверки). Проверяет, что медиана разностей не равна
нулю. Не требует нормальности. При малом числе блоков мощность низкая.
### 7.5. Критерий Фридмана
Сравнивает три и более модели на одних и тех же блоках. Нулевая гипотеза —
все модели одинаковы. При отклонении нулевой гипотезы можно использовать
post-hoc критерий Неменьи и поправку Холма. В отчёте достаточно указать
статистику, p-значение и поправку.
### 7.6. Поправка Холма—Бонферрони
При \(m\) одновременных проверках вероятность хотя бы одного ложного
отклонения растёт. Поправка Холма упорядочивает p-значения и умножает их на
\((m - \text{ранг})\). Она менее консервативна, чем классическая поправка
Бонферрони, и широко используется.
### 7.7. Размер эффекта
p-значение отвечает на вопрос «есть ли различие», но не «насколько оно
велико». Поэтому приводите разницу macro-F1 и её доверительный интервал.
Разница в 1–2 процентных пункта при 34 классах и 2005 объектах может быть
статистически значимой, но практически незначимой.
---
## 8. Метрики для LSA и кластеризации
### 8.1. Объяснённая дисперсия
`TruncatedSVD` раскладывает матрицу TF-IDF по компонентам. Доля объяснённой
дисперсии компоненты \(j\):
\[
\text{EVR}_j = \frac{\sigma_j^2}{\sum_k \sigma_k^2},
\]
где \(\sigma_j\) — сингулярное число. Накопленная доля — сумма первых \(k\).
Она показывает, какая доля вариабельности матрицы сохраняется при усечении.
Важно: высокая объяснённая дисперсия не гарантирует полезность для
классификации. Выбор \(k\) делается по внешней метрике (macro-F1) и
интерпретируемости, а не только по графику объяснённой дисперсии.
### 8.2. Ошибка восстановления
Относительная ошибка \(\|X - X_k\|_F / \|X\|_F\), где \(X_k\) —
приближение матрицы после SVD. Показывает, насколько потеря информации велика.
Полезна как дополнительная диагностика.
### 8.3. ARI, NMI, силуэт
- **ARI** (Adjusted Rand Index) — согласие кластеризации с истинными классами
с поправкой на случай. 1 — идеальное совпадение, 0 — случайный уровень.
- **NMI** (Normalized Mutual Information) — взаимная информация между
кластеризацией и классами, нормированная в [0,1].
- **Силуэт** — насколько объект ближе к своему кластеру, чем к соседнему.
Значения от -1 до 1; выше лучше.
- **Calinski–Harabasz** — отношение межкластерной дисперсии к внутрикластерной;
выше лучше.
- **Davies–Bouldin** — среднее отношение внутрикластерного разброса к
межкластерному; ниже лучше.
Кластеризация центроидов персонажей — предварительный анализ. ARI может быть
низким даже при полезной структуре; не делайте из кластеризации сильных
выводов.
---
## 9. Классификаторы
### 9.1. Зачем несколько классификаторов
Разные модели по-разному извлекают сигнал:
- вероятностные модели (наивный Байес) хорошо работают с разреженными
частотными признаками;
- линейные модели (логистическая регрессия, SVM) устойчивы при большом числе
признаков и малом числе объектов;
- деревья и ансамбли ловят нелинейные взаимодействия;
- метод ближайших соседей использует локальную структуру.
Сравнение нескольких моделей нужно не для «гонки за процентом», а чтобы
показать, что вывод не зависит от одного алгоритма. Если разные модели дают
близкие результаты, вывод надёжнее.
### 9.2. DummyClassifier (базовая модель)
Предсказывает самый частый класс или случайный класс с учётом распределения.
Не использует признаки. Нужен как нижняя граница: если модель не лучше
Dummy, она не извлекла сигнал.
В нашей задаче Dummy с самым частым классом даёт долю правильных ответов
около 6,9%, но macro-F1 около 0,004. Это хороший пример того, почему долю
правильных ответов нельзя использовать отдельно.
### 9.3. Наивный байесовский классификатор (Multinomial Naive Bayes)
Идея: применить теорему Байеса и предположить, что признаки условно
независимы при данном классе:
\[
P(c \mid x) \propto P(c)\prod_{j=1}^{d} P(x_j \mid c).
\]
Для текстовых частот используется мультиномиальное распределение. Чтобы не
было нулевых вероятностей, применяется сглаживание Лапласа:
\[
P(w \mid c) = \frac{N_{w,c} + \alpha}{N_c + \alpha V},
\]
где \(N_{w,c}\) — число вхождений слова \(w\) в класс \(c\), \(N_c\) — общее
число слов класса, \(V\) — размер словаря, \(\alpha\) — параметр сглаживания.
Плюсы:
- очень быстрый;
- хорошо работает на разреженных TF-IDF и частотных признаках;
- устойчив при малом числе объектов;
- легко объясняется.
Минусы:
- предположение о независимости признаков почти всегда ложно;
- чувствителен к дисбалансу, если не использовать веса классов;
- требует неотрицательных признаков; поэтому LSA-компоненты (они могут быть
отрицательными) в нашей реализации исключены;
- вероятности плохо калиброваны.
В нашем конвейере для MultinomialNB используются ручные неотрицательные
признаки после MinMax-масштабирования, символьные и POS n-граммы. Это
честная базовая модель, но не основной кандидат.
### 9.4. Логистическая регрессия
Линейная модель. Для каждого класса вычисляется линейная оценка:
\[
s_c(x) = w_c^\top x + b_c.
\]
Вероятности получаются через softmax:
\[
P(c \mid x) = \frac{\exp(s_c(x))}{\sum_{k=1}^{C}\exp(s_k(x))}.
\]
Обучение минимизирует перекрёстную энтропию:
\[
\mathcal{L} = -\frac{1}{n}\sum_{i=1}^{n}\log P(y_i \mid x_i)
+ \frac{1}{2C}\|w\|_2^2.
\]
Параметр \(C\) — обратная сила регуляризации: меньше \(C\) — сильнее
регуляризация, проще модель. В нашей реализации используется L2 и
`class_weight="balanced"`, чтобы редкие классы не игнорировались.
Плюсы:
- сильная и стабильная базовая модель для текста;
- хорошо работает при \(d \gg n\);
- коэффициенты интерпретируемы: видно, какие признаки увеличивают шанс
класса;
- выдаёт вероятности.
Минусы:
- только линейные границы;
- чувствительна к масштабу признаков (поэтому стандартизация);
- при сильной мультиколлинеарности коэффициенты нестабильны;
- вероятности могут быть плохо калиброваны.
В наших прогонах логистическая регрессия — основная модель для сравнения
наборов признаков.
### 9.5. Линейный метод опорных векторов (Linear SVM)
Ищет линейную границу, максимизирующую зазор между классами. Для
неразделимых данных используется мягкий зазор:
\[
\min_{w,b,\xi} \frac{1}{2}\|w\|^2 + C\sum_{i=1}^{n}\xi_i
\]
при ограничениях \(y_i(w^\top x_i + b) \ge 1 - \xi_i\), \(\xi_i \ge 0\).
Параметр \(C\) задаёт штраф за нарушения зазора.
Плюсы:
- часто очень силён на текстовых признаках;
- устойчив к высокой размерности;
- хорошо работает с разреженными матрицами;
- класс-веса поддерживаются.
Минусы:
- не выдаёт вероятности; есть только решающая функция;
- требует калибровки, если нужны вероятности;
- чувствителен к выбору \(C\);
- для top-k используем значения решающей функции, а не вероятности.
В отчёте не сравнивайте log loss у SVM: он не определён без калибровки.
### 9.6. Случайный лес (Random Forest)
Ансамбль решающих деревьев. Каждое дерево обучается на бутстрэп-выборке, а
при разбиении рассматривается случайное подмножество признаков. Итоговый
класс — голосование деревьев (или среднее вероятностей).
Плюсы:
- ловит нелинейные взаимодействия;
- устойчив к выбросам и масштабу признаков;
- даёт permutation importance;
- поддерживает веса классов.
Минусы:
- склонен к переобучению при большом числе признаков и малом числе объектов;
- медленнее линейных моделей;
- importance смещены в пользу коррелированных признаков;
- вероятности могут быть плохо калиброваны.
В нашей задаче лес — дополнительная проверка, а не основной кандидат:
2005 объектов и 34 класса — небольшая выборка для леса.
### 9.7. Сверхслучайные деревья (ExtraTrees)
Похожи на случайный лес, но пороги разбиения выбираются случайно, а не
оптимизируются. Это уменьшает дисперсию и ускоряет обучение, но может
увеличить смещение. Полезны как альтернатива случайному лесу.
### 9.8. Метод k ближайших соседей (kNN)
Для объекта находится \(k\) ближайших объектов обучающей выборки; класс
определяется голосованием (или взвешенным голосованием). В нашей реализации
используется косинусное расстояние и веса, обратные расстоянию.
Плюсы:
- простая и интерпретируемая идея;
- не делает предположений о форме границы;
- хорошо работает, если признаки хорошо нормированы.
Минусы:
- проклятие размерности: в высоком измерении расстояния становятся похожими;
- чувствителен к масштабу и шуму;
- медленный на больших выборках;
- не выдаёт содержательных коэффициентов.
kNN полезен как локальная базовая модель, но в стилометрии обычно уступает
линейным моделям.
### 9.9. Градиентный бустинг (опционально)
Последовательно строит деревья, каждое из которых исправляет ошибки
предыдущих. Обычно силён на табличных данных, но на 2005 объектах и 34
классах легко переобучается. В основной конфигурации не используется; может
быть добавлен как дополнительная модель при аккуратной настройке.
### 9.10. Дельта Барроуза
Классический метод стилометрии, не являющийся классификатором в смысле
машинного обучения.
Алгоритм:
1. Выбрать \(m\) наиболее частотных слов обучающей выборки (MFW).
2. Для каждого документа вычислить относительные частоты \(f_{ij}\).
3. z-нормировать каждый признак по обучающей выборке:
\[
z_{ij} = \frac{f_{ij} - \mu_j}{\sigma_j}.
\]
4. Вычислить центроид каждого класса.
5. Отнести документ к классу с минимальным расстоянием:
\[
\Delta_i = \frac{1}{m}\sum_{j=1}^{m}|z_{ij} - z_{cj}|
\]
(манхэттенская дельта) или косинусным расстоянием (Cosine Delta).
Плюсы:
- стандартная и хорошо объяснимая базовая модель;
- не требует сложной настройки;
- устойчив к теме, если выбраны частотные слова;
- легко воспроизводится.
Минусы:
- на коротких репликах оценки частот шумные;
- число MFW \(m\) нужно подбирать;
- z-нормирование чувствительно к выбросам;
- уступает ML-моделям при наличии большого числа признаков.
В отчёте дельта нужна как независимая проверка: если ML-модели и дельта
показывают сходную картину, вывод надёжнее.
### 9.11. Сравнение классификаторов
| Модель | Тип | Вероятности | Работа с разреженными признаками | Веса классов | Интерпретируемость |
|---|---|---|---|---|---|
| Dummy | базовая модель | да | не использует | нет | тривиальная |
| MultinomialNB | вероятностная | да | хорошо | нет | средняя |
| LogisticRegression | линейная | да | хорошо | да | высокая |
| LinearSVC | линейная | нет | хорошо | да | средняя |
| RandomForest | ансамбль деревьев | да | удовлетворительно | да | средняя |
| ExtraTrees | ансамбль деревьев | да | удовлетворительно | да | средняя |
| kNN | локальная | да | удовлетворительно | нет | низкая |
| Delta | метрическая | нет/условно | хорошо | нет | высокая |
---
## 10. Схема валидации
### 10.1. Обучение и тест
Модель настраивается на обучающей выборке и проверяется на тестовой. Нельзя
оценивать модель на тех же объектах, на которых она обучалась: она может
запомнить их и показать завышенное качество (переобучение).
### 10.2. Перекрёстная проверка
При перекрёстной проверке (cross-validation) выборка делится на \(k\)
блоков. Модель обучается на \(k-1\) блоках и проверяется на оставшемся;
процедура повторяется \(k\) раз. Итог — среднее и разброс метрик.
### 10.3. Стратификация
При стратификации сохраняется доля классов в каждом блоке. Это важно при
дисбалансе: иначе редкий класс может вообще не попасть в тестовый блок.
В нашей задаче 5 блоков и минимум 15 реплик на класс дают около 3 тестовых
реплик на класс.
### 10.4. Повторность
Одного разбиения недостаточно: результат зависит от случайного деления.
Повторная перекрёстная проверка (repeated cross-validation) выполняет
несколько разбиений с разными seed и даёт более устойчивую оценку.
### 10.5. Вложенная перекрёстная проверка
Гиперпараметры нельзя настраивать на тестовых блоках. Вложенная схема:
- внешние блоки — оценка качества;
- внутренние блоки — настройка гиперпараметров.
Такой протокол дороже, но честнее.
### 10.6. Утечка данных
Утечка (data leakage) — ситуация, когда информация из тестовой выборки
попадает в обучение. Типичные причины:
- TF-IDF или SVD обучены на всём корпусе до кросс-валидации;
- отбор признаков выполнен по всей выборке;
- масштабирование выполнено до разделения;
- почти одинаковые тексты есть и в обучении, и в тесте.
В нашем конвейере все обучаемые преобразования находятся внутри `Pipeline` и
настраиваются только на обучающих блоках. Ручные признаки и POS-теги не
используют метки, поэтому их можно считать заранее.
### 10.7. Дисбаланс
Основные способы:
- веса классов (`class_weight="balanced"`);
- macro-F1 и сбалансированную долю правильных ответов;
- отчёт по классам;
- стратификация.
Не используйте SMOTE и другие методы синтеза текста без крайней
необходимости: они могут создать искусственные комбинации слов и исказить
стилометрический сигнал.
---
## 11. Как объяснять результаты на защите
1. **Сначала постановка.** 2005 реплик, 34 персонажа, один автор; задача —
различить речевые маски, а не авторов.
2. **Затем данные и ограничения.** Короткие реплики, дисбаланс, ручная
фильтрация, отсутствие сцен.
3. **Затем признаки.** Функциональные слова, POS, символьные n-граммы, LSA;
почему именно они.
4. **Затем валидация.** 5-блочная стратифицированная перекрёстная проверка,
повторность, вложенная настройка, контроль утечек.
5. **Затем метрики.** Macro-F1 как основная; доля правильных ответов как дополнительная;
top-3/top-5; F-мера по классам; матрица ошибок.
6. **Затем результаты.** Сравнение с базовой моделью, доверительные интервалы,
статистические тесты.
7. **Затем интерпретация.** Какие персонажи различаются, какие
перепутываются, что это говорит о речевых масках.
8. **Затем ограничения и улучшения.** Больше данных, агрегация реплик,
тематический контроль, более точный частеречный теггер, сцены.
### 11.1. Пример корректной формулировки
> «На 2005 репликах и 34 классах модель логистической регрессии по
> объединённому набору стилометрических признаков, символьных и частеречных
> n-грамм достигает macro-F1 0,18 при 5-блочной стратифицированной
> перекрёстной проверке. Случайный уровень для 34 классов
> составляет 0,029; top-3 равен 0,34 при случайном уровне 0,088. Это
> указывает на статистически различимый, но не абсолютный сигнал. Основной
> вклад дают символьные и частеречные n-граммы; LSA по всем словам может
> частично отражать тему, поэтому мы сравниваем её с LSA по POS и
> функциональным словам».
### 11.2. Чего избегать
- «Доля правильных ответов 10%, значит модель плохая» — без сравнения с
базовой моделью и macro-F1 это не вывод.
- «Модель различает авторов» — автор один; различаются персонажи.
- «LSA выявил стиль» — LSA может выявить тему; нужен контроль.
- «p < 0,05, значит различие важное» — нужен размер эффекта и интервал.
- «Кластеризация доказала группы» — кластеризация носит предварительный характер.
---
## 12. Краткая версия для слайдов
### 12.1. Метрики
| Метрика | Формулировка для слайда | Ориентир |
|---|---|---|
| Macro-F1 | Средняя F-мера по 34 классам; все персонажи важны одинаково | Случайно около 0,029 |
| Сбалансированная доля правильных ответов | Средняя полнота по классам; показывает, находит ли модель редких персонажей | Случайно около 0,029 |
| Доля правильных ответов | Доля совпавших предсказаний; при дисбалансе может вводить в заблуждение | Случайно около 0,029 |
| MCC | Корреляция истинных и предсказанных меток от -1 до 1; устойчив к дисбалансу | 0 — случайно |
| Каппа Коэна | Согласие с поправкой на случайное угадывание | 0 — случайно |
| Top-3 | Истинный персонаж попал в тройку лучших ответов модели | Случайно около 0,088 |
| Логарифмическая потеря | Качество вероятностей; штраф за уверенную ошибку | Случайно около 3,53 |
| Оценка Брайера | Квадратичная ошибка вероятностей | Случайно около 0,971 |
| ROC-AUC | Для верификации «свой/чужой»: качество ранжирования без выбора порога | 0,5 — случайно |
| EER | Порог, где доля ложных принятий равна доле ложных отклонений | Чем меньше, тем лучше |
| Бутстрэп-интервал | Диапазон, в котором с вероятностью 95% лежит метрика | Уже — устойчивее |
| Мак-Немар | Парный тест: различаются ли две модели на одних и тех же репликах | p < 0,05 — есть различие |
### 12.2. Классификаторы
| Модель | Формулировка для слайда | Сильная сторона | Ограничение |
|---|---|---|---|
| Dummy | Нижняя граница: всегда предсказывает частый класс | Простота | Не использует признаки |
| MultinomialNB | Быстрый вероятностный baseline для частотных признаков | Скорость, устойчивость | Независимость признаков, дисбаланс |
| LogisticRegression | Линейная модель с вероятностями и интерпретируемыми коэффициентами | Стабильность, интерпретируемость | Только линейные границы |
| LinearSVC | Линейная модель с максимальным зазором | Сильна на текстовых признаках | Нет калиброванных вероятностей |
| RandomForest | Ансамбль деревьев, ловит нелинейные взаимодействия | Нелинейность, importance | Переобучение на малой выборке |
| kNN | Локальная модель по близости объектов | Простая идея | Проклятие размерности |
| Delta | Классическое расстояние до центроида по частотным словам | Независимый стилометрический baseline | Шум на коротких репликах |
### 12.3. Одна фраза для вывода
> «Качество оценивалось по macro-F1 с 95% бутстрэп-интервалом; модели
> сравнивались точным критерием Мак-Немара, а не только по доле правильных
> ответов. Устойчивость вывода проверяется сравнением нескольких
> классификаторов: если разные модели дают близкие значения macro-F1 и top-3,
> результат не является артефактом одного алгоритма».
---
## 13. Глоссарий
| Русский термин | Английский термин | Краткое значение |
|---|---|---|
| Признак | feature | Измеримая характеристика объекта |
| Класс | class | Один из вариантов ответа (персонаж) |
| Обучающая выборка | training set | Объекты, на которых модель учится |
| Тестовая выборка | test set | Объекты, на которых измеряется качество |
| Перекрёстная проверка | cross-validation | Многократное деление на обучение и тест |
| Блок | fold | Одна часть при перекрёстной проверке |
| Стратификация | stratification | Сохранение долей классов в блоках |
| Гиперпараметр | hyperparameter | Параметр модели, задаваемый до обучения |
| Переобучение | overfitting | Запоминание обучающих данных вместо обобщения |
| Утечка данных | data leakage | Информация из теста попадает в обучение |
| Матрица ошибок | confusion matrix | Таблица истинных и предсказанных классов |
| Точность | precision | Доля правильных среди предсказанных классом |
| Полнота | recall | Доля найденных среди истинных класса |
| F-мера | F1 score | Гармоническое среднее точности и полноты |
| Macro-F1 | macro F1 | Среднее F1 по классам с равным весом |
| Доля правильных ответов | accuracy | Доля совпавших предсказаний |
| Сбалансированная доля | balanced accuracy | Средняя полнота по классам |
| MCC | Matthews correlation coefficient | Корреляция истинных и предсказанных меток |
| Каппа Коэна | Cohen's kappa | Согласие с поправкой на случай |
| Top-k | top-k accuracy | Попал ли истинный класс в k лучших |
| Логарифмическая потеря | log loss | Качество вероятностей |
| Оценка Брайера | Brier score | Квадратичная ошибка вероятностей |
| ROC-AUC | ROC AUC | Площадь под ROC-кривой |
| EER | equal error rate | Точка равенства FPR и FNR |
| Бутстрэп | bootstrap | Выборка с возвращением для интервалов |
| Мак-Немар | McNemar test | Парный тест двух моделей |
| Уилкоксон | Wilcoxon test | Парный непараметрический тест |
| Фридман | Friedman test | Сравнение нескольких моделей |
| LSA | latent semantic analysis | TF-IDF + сингулярное разложение |
| TF-IDF | term frequency — inverse document frequency | Взвешивание слов |
| SVD | singular value decomposition | Сингулярное разложение |
| ARI | adjusted Rand index | Согласие кластеризации с классами |
| NMI | normalized mutual information | Взаимная информация кластеризации и классов |
| Силуэт | silhouette | Качество кластерной структуры |
| Наивный Байес | naive Bayes | Вероятностная модель с независимостью признаков |
| Логистическая регрессия | logistic regression | Линейная вероятностная модель |
| Метод опорных векторов | support vector machine | Линейная модель с максимизацией зазора |
| Случайный лес | random forest | Ансамбль решающих деревьев |
| kNN | k-nearest neighbours | Классификация по ближайшим объектам |
| Дельта Барроуза | Burrows' Delta | Метрика расстояния в стилометрии |