{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "8122cb9e-4aab-44c4-9dbf-a01f5fc61aea",
   "metadata": {},
   "source": [
    "# Оптимизация потерь в задачах классификации"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbf7fd93-2efc-40ab-80ad-ca9b29c8807c",
   "metadata": {},
   "source": [
    "В столбцах prediction1,2,3 данных содержатся результаты предсказания соответствия классу 1 некоторых классификаторов (трех вариантов глубокой нейронной сети) для тестовой выборки. Столбец label содержит истинные классы объектов. \n",
    "\n",
    "## Задание 1\n",
    "  \n",
    "Постройте кривую ошибок для каждой нейросети. Чем они отличаются? Площадь под какой кривой больше? Трансформируйте предсказания нейросетей в вероятности класса 1 (далее будем обозначать их probabilities), предполагая, что тестовая выборка распределена точно так же, как и будут распределены объекты в будущем, к которым наш алгоритм планируется применять. Для этого можно действовать следующим образом. Для каждого значения, возвращаемого нейросетью, взять несколько похожих значений и вычислить среди них процент класса 1, т.е. по сути применить метод ближайших соседей к данным: x - предсказания нейросети, y - истинные классы. Постройте на одном графике зависимости вероятностей от величины предсказания для всех нейросетей.\n",
    "\n",
    "## Задание 2 \n",
    " \n",
    "  Для соответствующей вашему варианту нижеследующей задачи на листике составьте таблицу потерь/прибыли в результате ошибочных/правильных ответов алгоритма (первая строка таблицы - вероятности исходов, остальные - потери/прибыль от каждого действия алгоритма, одна строка - одно действие). Для этого придумайте/найдите в интернете разумные величины штрафов и напишите их словесное обоснование (т.е. восполните недостающие данные в постановке задачи). Теортически (на листике) найдите зависимость оптимального порогового значения от вероятности для каждой из нейросетей (это называется decision function). Запрограммируйте найденное пороговое значение и выясните, какие из нейросетей рентабельны и какая приносит наибольшую прибыль?\n",
    "  \n",
    "1. Задача выдачи кредита размером 1 млн. руб на 1 год. probabilities - вероятности возврата кредита клиентами. Ставка по кредиту: 4%. Ответьте на вопрос, следует ли в этой задаче учитывать \"упущенную выгоду\", есть ли в статистике обычного банка необходимые для этого данные? \n",
    "  \n",
    "2. Задача предсказания существенного взлета/падения курса валюты в течении следующего месяца более чем на 15%. Предполагается, что в выборку были добавлены только те промежутки времени, в течении которых произошло изменение курса более чем на 15%, причем 1 означает рост курса валюты, 0 - падение. Предположите для простоты, что операции покупки/продажи вы можете совершать каждый месяц, своих денег у вас нет, для каждой операции вам нужно занимать деньги у друга (в рублях или валюте) и в конце месяца возвращать ему занятую сумму (без процентов).\n",
    "  \n",
    "3. Задача предсказания определенного типа онкологии в частной клинике. probabilities - вероятность того, что плохой диагноз - правильный. Алгоритм должен принять решение: а) лечить от онкологии опасными средствами, б) лечить от похожей болезни безопасными методами, в) отказаться от лечения. Лечение опасно (с вероятностью 60% пациент станет инвалидом III группы), но существенно продлевает жизнь. Сначала получите решение без учета репутационных потерь клиники, а потом с ними.\n",
    "  \n",
    "4. Задача определения оптимальной цены страховки в зависимости от вероятности (probabilities) клиента попасть в аварию с ценой ремонта более 20 тыс. руб в будущем году. Сколько заработает каждая нейросеть (на этот вопрос лучше сразу ответить устно)? Для каждого клиента ответьте на вопрос какая нейросеть лучше (экономически выгодней)? Можно ли составить бустинг нейросетей, который автоматически будет для каждого клиента выбирать лучшую?\n",
    "\n",
    "5. Разработка медицинского теста коронавируса, который будет использоваться в качестве официального (т.е. в случае положительного результата человека отправляют на больничный (1 неделя), выдают бесплатно лекарства и бесплатно проводят дезинфекцию в квартире).\n",
    "  \n",
    "6. Задача предсказания брака изделия (стоимость изделия - 10 тыс руб). Сначала получите решение без учета репутационных потерь компании, а потом с ними. \n",
    "\n",
    "7. Рекомендация пользователю товара на сайте интернет магазина. probabilities - вероятности того, что данный пользователь купит товар для каждой единицы устоявшегося ассортимента магазина. Кроме товаров, для которых известна история покупок, и можно рассчитать вероятности, в магазин также поступают новые товары, о которых ничего не известно, и, поэтому, вероятности их приобретения данным пользователем рассчитать не представляется возможным. Для фиксированной одинаковой для всех стоимости старого товара и другой фиксированной одинаковой стоимости нового товара выясните при каких условиях лучше рекомендовать новый товар, а при каких - старый. Какова будет средняя прибыль магазина в таком случае?\n",
    "\n",
    "8. Задача предсказания подозрительности товара в интернет-магазине подержанных вещей т.е. того, что покупателю покупка не понравится, и ему захочется сделать возврат денег. probabilities - вероятность возврата. Товар отмеченный как \"подозрительный\" пользователь с большой вероятностью не купит. Но это также значит, что и интернет магазин не получит процента с продажи. Возврат денег магазин осуществляет из своих средств. С некоторой вероятностью получить деньги от продавца не удается (неблагонадежные продавцы скрываются).\n",
    "\n",
    "9. Задача предсказания землетрясения в населенном пункте. В случае большой вероятности власти обязаны эвакуировать население и остановить функционирование критических промышленных объектов (например, атомной электростанции), что повлечет за собой приличные расходы. В случае средней вероятности землетрясения останавливают только функционирование критических промышленных объектов. Нужно минимизировать затраты муниципалитета.\n",
    "\n",
    "10. Задача определения размера подарка клиенту. probabilities - вероятности того, что клиент купит у нас товар снова. Будем считать, что после после подарка вероятность купить возрастает на 10%. Стоимость подарка измеряйте в процентах от стоимости товара. Ответьте на вопрос, следует ли в этой задаче учитывать \"упущенную выгоду\", есть ли в статистике обычной компании необходимые для этого данные?\n",
    "\n",
    "11. Задача финансирования стартапов венчурным фондом. Нужно понять, стоит ли вкладывать средства в стартап. probabilities - вероятности успешности стартапов. Считайте, что в случае успешности стартапа, с вероятностью 40% прибыль в три раза больше вложенных средств, с вероятностью 60% прибыль в 1.5 раза больше вложенных средств. Ответьте на вопрос, следует ли в этой задаче учитывать \"упущенную выгоду\", есть ли в статистике обычного фонда необходимые для этого данные?\n",
    "\n",
    "12. Задача наема сотрудников фирмы. probabilities - вероятности того, что сотрудник окажется подходящим и принесет компании прибыль пропорциональную его зарплате. В противном случае его придется уволить и выплатить в худшем случае три месячных оклада.\n",
    "\n",
    "13. Задача предсказании поломки изношенного двигателя самолета. Подозрительную запчасть можно сразу утилизировать, а можно отправить на тестирование и починку, если он не совсем безнадежен. Тестирование требует вложения некоторых средств, по сравнению с бесплатной утилизацией. probabilities - вероятности того, что в следующем полете двигатель выйдет из строя\n",
    "\n",
    "14. Разрешение вылета самолета в зависимости от погодных условий. probabilities - вероятности того, что на маршруте случится опасное погодное явление, которое может привести к авиакатастрофе. Среднее количество пассажиров в салоне - 100. В случае отмены вылета по расписанию среднее время задержки вылета - 10 часов. Найдите в интернете размеры средней компенсации задержки международного рейса, а также размеры компенсации родственникам погибших пассажиров. Более какой попроговой вероятности нужно запрещать вылет самолета?\n",
    "\n",
    "15. Подарок скидки клиенту. probabilities - вероятность того, что клиент купит не только товар со скидкой, но и совершит еще несколько покупок в вашем магазине. Для простоты считайте величину скидки постоянной - 30%. Средняя стоимость дополнительных покупок равна 150% от стоимости товара со скидкой. Наценка на все товары в магазине фиксирована и составляет 20%. Среди клиентов, не покупающих дополнительные товары, 20% вообще не реагируют на скидку и ничего не покупают, а 80% покупают только товар со скидкой.\n",
    "\n",
    "16. Назначения ярлыка \"надежная модель\" на сайте компьютерного интернет-магазина. probabilities - вероятности обращения клиентов с этим товаром в сервис-центр в течении гарантийного срока. Для простоты считайте среднюю стоимость ремонта равной 20% стоимости товара. Надёжные модели в среднем покупаются клиентами с вероятностью на 30% больше, чем модели без такого ярлыка. Для товаров с какими probabilities магазину следует назначать ярлык \"надежная модель\", чтобы максимизировать свою прибыль?\n",
    "\n",
    "17. Выявление нарушений ПДД по записям камер видеонаблюдения. probabilities - вероятности того, что на данном кусочке видео произошло нарушение ПДД. Помеченные как \"нарушения\" кусочки видео впоследствии должны быть обработаны человеком. За один рабочий день человек может проанализировать 200 кусочков видео. Если кусочков видео для ручного анализа будет больше, придется нанимать еще людей. Зарплата одного такого специалиста - 40 тыс. руб. Предположите, что один штраф за нарушение ПДД в случае, если оно действительно произошло, позволяет покрыть расходы на анализ видео в сумме 20 руб. Кусочки видео с какими probabilities следует помечать как нарушения?\n",
    "\n",
    "18. Каждый год медицинская страховая компания планирует, какую часть денег нужно спасти от инфляции, а какую - придется держать в виде свободной суммы для оплаты страховых случаев. Для решения этой задачи компания нуждается в предсказании обращения клиентов за дорогостоящей медицинской помощью в следующем году. probabilities - вероятности того, что клиента госпитализируют, и страховой компании придется выплатить больнице приличную сумму (найдите среднюю оценку стоимости одного дня пребывания в стационаре). В среднем клиенты в случае госпитализации лежат в больнице 4 дня. Выясните, выше какой пороговой вероятности нужно предсказывать госпитализацию клиентов, и не защищать деньги на оплату их медицинских услуг от инфляции. Размер инфляции возьмите равным 10%. В случае если компания ошибется и не запланирует достаточно средств, то ей придется брать недостающие деньги в кредит стоимостью 20%.\n",
    "\n",
    "19. Электронный помошник врача частной клиники предсказывает вероятность probabilities саркомы у пациента. Врач после этого может принять решение назначить операцию, которая с вероятностью 30% приведет к инвалидизации больного. Другой вариант - отправить пациента на дорогостоящее дообследование (100 тыс. руб). Третий варинат - назначить безвредное дешевое симптоматическое лечение, от которого клиенту сразу станет легче, но если диагноз саркома верен, то промедление в правильном лечении приведет пациента к тяжким последствиям. Какое действие следует предпринять в зависимости от вероятности саркомы для максимимзации прибыли клиники? Стоимость операции - 20 тыс. руб. В случае неправильного диагноза и инвалидизации больного вслествии операции, он обратится в суд и взыщет с клиники положенную по закону сумму (найдите ее размер в интернете). Сначала получите решение без учета репутационных потерь клиники, а потом с ними.\n",
    "\n",
    "20. Геологоразведовательной компания использует ИИ для предсказания наличия молибдена в недрах земли (probabilities - вероятность наличия в разных местах). Для проверки происходит бурение глубокой скважины глубиной 100 м (найдите стоимость в интернете). С вероятностью 50%, даже в случае наличия молибдена в этом месте, бурение одной скважины не приводит к его обнаружению. В случае удачи компания получает прибыль в размере 1 млн руб. Выясните, для каких мест нужно бурить скважины и для каждого места - сколько раз это нужно делать, если бурение не приведет к обнаружению молибдена.\n",
    "\n",
    "21. Важной состовляющей процессора является предсказатель переходов (значений истинности условных операторов или условия выхода из цикла). Внутри процессора работает 11-ступенчатый конвейер с несколькими параллельными сериями вычислителей. Ветвление в програмном коде может быть обработано процессором тремя способами: (1) полностью загрузить конвейер командами ветки True, (2) половину параллельных серий конвейера загрузить командами ветки True и вторую половину - False, или (3) все загрузить командами ветки False. В случае, если значение истинности условного оператора или условия выхода из цикла было предсказано неверно и был выбран способ (1) или (3), то в конвейере возникает так называемый \"пузырь\" и программа замедляет свое выполнение в среднем на 20 тактов. При выборе способа (2) выполнение всегда замедляется на 10 тактов. Выясните, какой способ нужно выбрать для каждой вероятности массива probabilities истинности ветки True, чтобы программа выполнилась за кратчайшее время.\n",
    "\n",
    "\n",
    "\n",
    "## Полезные кусочки кода\n",
    "\n",
    "### Построение кривой ошибок расчет площади под ней:\n",
    "\n",
    "```\n",
    "fpr, tpr, _ = sklearn.metrics.roc_curve(true_class, prediction)\n",
    "plt.figure()\n",
    "plt.plot(fpr, tpr, color='darkorange', lw=2)\n",
    "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n",
    "plt.show()\n",
    "print('Площадь под кривой =', sklearn.metrics.roc_auc_score(true_class, prediction) )\n",
    "```\n",
    "\n",
    "### Продвинутый алгоритм вычисления вероятностей - метод парзеновского окна:\n",
    "\n",
    "```\n",
    "from statsmodels.nonparametric.kernel_regression import KernelReg\n",
    "kr = KernelReg(endog=y, exog=x, var_type='c', bw=[0.2])\n",
    "prob, _ = kr.fit(x)\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "990c322d-a23e-4bdb-9ba5-4904a6d4ec22",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
