@kiling

Как оценить работу функции которая рассчитывает вероятность наступления события?

Существует функция, которая рассчитывает вероятность наступления события (Да или Нет). Проводим серию вычислений и соотносим их с реальными данными.

Например:
Расчетная вероятность/Наступило событие
0,9/Да
0,4/Да
0,8/Нет
0,1/Нет
0,5/Да
0,8/Да

Как оценить работу функции которая рассчитывает вероятность наступления события?
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 4
maximpushkarev75
@maximpushkarev75
Very bad monkey coder
Как вариант - провести одно и то же испытание N раз. Результат испытаний - либо событие E выполняется, либо нет.
Фиксировать каждый раз, когда событие наступило. Получим число N'.
Если вероятность наступления события P, то количество срабатываний события при бесконечно большом N равно N*P
Так как N мы все же берем конечным числом, то можно число успехов оценить с допуском T :

N*P - T <= N' <= N*P + T

если после N испытаний неравенство выполнено - функция адекватно посчитала вероятноть элементарного события
Чем больше N, тем меньший допуск T можно применять.
Ответ написан
@Vlad_Fedorenko
LogLoss тут не очень хорош тем, что ваша модель выдаёт бинарные ответы, а не вероятности наступления события. Посмотрите в сторону ROC-AUC. В отличие от LogLoss, она всегда лежит в отрезке [0.5;1]. Значение 0.5 эквивалентно подбрасыванию монетки.
UPD. Напутал. События - бинарные, а модель даёт вероятности
Ответ написан
Если Вы имеете в виду задачу сравнения двух или более различных реализаций функций, то тогда Вам скорее всего нужен LogLoss. Учтите, что если Вы не можете применить разные функции на одних и тех же данных (то есть проверка ведется на разных выборках), то они должны быть достаточно большими и однородными, иначе результаты сравнения будут недостоверными.
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
Тогда возникает вопрос. Какие могут быть недостатки у функции?

1. Смещение к «да» или смещение к «нет».
Для всех случившихся событий перемножаем вероятности соотв. исхода. То же самое для всех неслучившихся. Одно делим на другое, в идеале должна получиться единица.
Можно работать с логарифмами, даже очень широкая статистика не даст переполнения: на мантиссу в double шесть байтов, а на порядок — и двух нет. Можно проводить сброс порядка: получили, скажем, число меньше 1e−50 — множим на эту цифру, запоминаем: 50 порядков в уме.
Если статистики очень много, стоит кластеризовать входы и для каждого кластера посчитать эту статистику.

2. Излишняя самоуверенность. Функция говорит «0,9», в то время как вероятность максимум 0,7. Думаю, можно решить той самой кластеризацией по выходу функции.

3. Неуверенная работа. Функция не даёт статистических аномалий, но просто неуверенно работает, слишком часто выдавая «а хрѣнъ его знает». Vlad_Fedorenko предлагает площадь под ROC-кривой. Я бы просто предложил произведение вероятностей соответствующих исходов. Например, если у нас 6 пусков, можно сказать: «вероятность всегда 0,5», и получить результат 1/64≈0,016. А можно сказать: для трёх пусков вероятность 2/3, и для трёх — 1/3. Если так и случится, результат — 24/36≈0,022. Какой будет нормирующий коэффициент, сказать пока не могу.
UPD3. А ещё можно попробовать информационную энтропию.
UPD4. Эта конструкция, возможно, справится и с излишней самоуверенностью. Если она скажем этим тройкам 0,9 и 0,1, будет (0,9·0,9·0,1)² < 0,01.
UPD5. Идеал — разумеется, 1 (событию говорит 100%, если оно будет, и 0%, если нет).

UPD. Подкорректировал 1 — я так и имел в виду, но проглючил.
UPD2. Добавил неуверенную работу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы