RPC для случайного классификатора

Соображения насчет любимого типа задачек из класса "типа для всех все очевидно, но на самом деле нет".

Обозначения:
\(X\) — выборка объектов, каждый из которых принадлежит классу \(\mathbf{1}\) или классу \(\mathbf{0}\)
\(y_i\) — метка класса объекта \(x_i\)
\(\tilde{y_i}\) — ответ классификатора на объекте \(x_i\)
\(tp = \{x_i \in X : y_i = \mathbf{1} \wedge \tilde{y_i} = \mathbf{1}\}\) — true positive
\(fp = \{x_i \in X : y_i = \mathbf{0} \wedge \tilde{y_i} = \mathbf{1}\}\) — false positive
\(fn = \{x_i \in X : y_i = \mathbf{1} \wedge \tilde{y_i} = \mathbf{0}\}\) — false negative
\(ap = \{x_i \in X : y_i = \mathbf{1}\}\) — actual positive
\(pp = \{x_i \in X : \tilde{y_i} = \mathbf{1}\}\) — predicted positive
\(precision = \frac{|tp|}{|tp| + |fp|} = \frac{|tp|}{|pp|}\)
\(recall = \frac{|tp|}{|tp| + |fn|} = \frac{|tp|}{|ap|}\)


Рассмотрим случайный классификатор, который с вероятностью \(\alpha\) называет объект принадлежащим классу \(\mathbf{1}\). Тогда \(precision\) и \(recall\) как функции от случайных ответов классификатора сами становятся случайными величинами. Найдем их математическое ожидание:

\(\mathbf{E}[precision] = \mathbf{E}[\frac{|tp|}{|pp|}] = \mathbf{E}[\frac{\sum\limits_{k : x_k \in ap}\tilde{y_k}}{\sum\limits_{k : x_k \in X}\tilde{y_k}}]\stackrel{\mathbf{E}[\sum] = \sum{\mathbf{E}}}{=}\sum\limits_{k : x_k \in ap}\mathbf{E}[\frac{\tilde{y_k}}{{\sum\limits_{k : x_k \in X}\tilde{y_k}}}]\tag{1}\)

\(\tilde{y_k}\) являются независимыми одинаково распределенными индикаторными случайными величинами, поэтому \((1)\) можно представить в виде:

\(|ap|\mathbf{E}[\frac{\tilde{y}}{\sum\limits_{x \in X}\tilde{y}}]\), где \(\tilde{y}\) — индикатор того, что случайный объект из выборки классифицирован как \(\mathbf{1}\).

Рассмотрим выражение \(\mathbf{E}[\frac{\sum\limits_{x \in X}\tilde{y}}{\sum\limits_{x \in X}\tilde{y}}]\). С одной стороны, это \(\mathbf{E}[1] = 1\). С другой, это \(|X|\mathbf{E}[\frac{\tilde{y}}{{\sum\limits_{x \in X}\tilde{y}}}] \implies \mathbf{E}[\frac{\tilde{y}}{{\sum\limits_{x \in X}\tilde{y}}}] = \frac{1}{|X|}\). Тогда \((1)\) представляется как \(\frac{|ap|}{|X|}\).


Теперь посмотрим на \(recall\):

\(\mathbf{E}[recall] = \mathbf{E}[\frac{|tp|}{|ap|}]\stackrel{|ap| = Const}{=}\frac{1}{|ap|}\mathbf{E}[\sum\limits_{k : x_k \in ap}\tilde{y_k}] = \frac{1}{|ap|}\mathbf{E}[\sum\limits_{x \in ap}\tilde{y}] = \frac{1}{|ap|}\sum\limits_{x \in ap}\mathbf{E}[\tilde{y}]\tag{2}\)

Так как \(\tilde{y}\) — индикаторная величина, ее математическое ожидание равно вероятности того, что она примет значение \(1\), то есть \(\alpha\) (по условию). Тогда \((2)\) представляется как \(\frac{1}{|ap|}|ap|\alpha = \alpha\).


В итоге:
\(\mathbf{E}[precision] = \frac{|ap|}{|X|}\)
\(\mathbf{E}[recall] = \alpha\)

По определению \(RPC\) — это график зависимости \(precision\) и \(recall\) от некоторого порогового значения, относительно которого классифицируемые объекты разделяются на два класса (здесь будем считать, что имеется в виду пороговое значение вероятности для классификатора, ответы которого моделируют вероятность принадлежности к классу \(\mathbf{1}\)). В выкладках же вместо порового значения использовалась вероятность \(\alpha\) отнесения к классу \(\mathbf{1}\) случайным классификатором. Здесь будут довольно рукомахательные соображения: можно предполагать, что случайно относить к классу \(\mathbf{1}\) — это то же самое, что равномерно случайным образом генерировать вероятности отнесения к классу \(\mathbf{1}\) для каждого объекта выборки, а потом по выбранному порогу присваивать объекту метку класса. Если это соображение верно, то изменение \(\alpha\) равносильно изменению порога и каждому порогу случайного классификатора, выдающего вероятности, можно сопоставить вероятность \(alpha\) классификатора, который рассматривался изначально.

Получается, что в среднем при работе случайного классификатора \(precision\) вне зависимости от выбранного порога будет равен доле положительных примеров в выборке, а \(recall\) будет меняться обратно пропорционально порогу.