Чувствительность прогноза спроса

тема: Метрики классификации · уровень: средний

Условие

В файле data.csv приведены продажи киоска с мороженым. Для каждой операции указаны прогноз модели о высоком спросе и фактический результат.

Модель предсказывает высокий спрос, если значение forecast_score не меньше заданного порога. Фактический высокий спрос обозначается значением actual_high_demand, равным 1.

Требуется вычислить чувствительность и специфичность прогноза. Чувствительность равна TP / (TP + FN), где TP — число операций с фактическим высоким спросом, для которых модель предсказала высокий спрос, а FN — число операций с фактическим высоким спросом, для которых модель не предсказала высокий спрос. Специфичность равна TN / (TN + FP), где TN — число операций без фактического высокого спроса, для которых модель не предсказала высокий спрос, а FP — число операций без фактического высокого спроса, для которых модель предсказала высокий спрос.

Строки с пустым значением forecast_score не учитываются ни в одной из четырёх величин. В файле гарантируется, что после исключения таких строк имеются операции обоих фактических классов, поэтому деления на ноль не происходит. При равенстве forecast_score и порога модель предсказывает высокий спрос.

Формат ввода

В первой и единственной строке stdin задано целое число threshold — порог прогноза.

Рядом с программой находится файл data.csv в кодировке UTF-8 с разделителем-запятой и заголовком. В нём содержатся столбцы transaction_id, sale_date, forecast_score, actual_high_demand, receipt_rub. Пустое значение допускается только в столбце forecast_score.

Формат вывода

Выведите в первой строке чувствительность, во второй строке специфичность.

Каждое число выводится ровно с четырьмя знаками после десятичной точки.

Ограничения

В файле от 300 до 2000 строк с данными.

1 <= transaction_id <= 2000.

sale_date имеет длину 10 символов и записана в формате YYYY-MM-DD.

forecast_score — целое число от 0 до 100 либо пустая строка.

actual_high_demand равно 0 или 1.

45.00 <= receipt_rub <= 900.00.

0 <= threshold <= 100.

Решить задачу с автопроверкой на Python →

Куда дальше