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

В библиотеке sklearn есть команда pred_proba (), которую можно использовать для генерации массива из двух столбцов, первый столбец - это вероятность того, что результат будет 0, а второй - вероятность того, что результат будет 1. Сумма каждой строки из двух столбцов также должно быть равно одному.

Чтобы проиллюстрировать, как можно прогнозировать вероятности, я хотел бы использовать наборы данных, взятые из прогноза перекрестных продаж на странице конкурса Analytics Vidhya, которую можно найти по ссылке ниже: - https://datahack.analyticsvidhya.com / contest / janatahack-cross-sell-prediction / # ProblemStatement

Ниже приведены выдержки из постановки задачи прогнозирования перекрестных продаж:

«Ваш клиент - страховая компания, которая предоставила своим клиентам медицинское страхование, и теперь им нужна ваша помощь в построении модели, чтобы предсказать, будут ли страхователи (клиенты) прошлого года также заинтересованы в страховании транспортных средств, предоставляемом компанией. Построение модели, позволяющей предсказать, будет ли клиент заинтересован в страховании транспортных средств, чрезвычайно полезно для компании, поскольку она может соответствующим образом спланировать свою коммуникационную стратегию, чтобы обратиться к этим клиентам и оптимизировать свою бизнес-модель и доходы. Чтобы предсказать, будет ли клиент заинтересован в страховании транспортных средств, у вас есть информация о демографических данных (пол, возраст, тип кода региона), транспортных средствах (возраст транспортного средства, повреждения), полисе (премиум, канал поиска) и т. Д. »

Первым шагом в решении этой головоломки является загрузка и чтение библиотек и файлов. К сожалению, комплекты поездов и тестов настолько велики, что их нельзя сохранить в онлайн-репозитории (бесплатно), поэтому мне пришлось сохранить файлы в моей учетной записи на Google Диске, где мне бесплатно выделено 15 гигабайт данных: -

Затем я проверил любые нулевые значения, и в этом случае мне нечего было приписать: -

Я использовал библиотеку seaborn для графического представления целевой переменной. Затем я использовал Counter () для подсчета предложений 0 и 1. Оба метода интерпретации выявили дисбаланс классов в пользу 0. Это означает, что классы должны быть сбалансированы, чтобы получить правильное представление единиц в прогнозе: -

Я использовал LabelEncoder () для преобразования столбцов объекта в числовые в качестве меры предварительной обработки. Затем я определил X, y и X_test. Набор данных поезда был разделен с помощью train_test_split () с 10% в качестве тестового набора. Stratify имеет значение y, потому что существует дисбаланс классов. Параметр stratify спрашивает, хотите ли вы сохранить ту же пропорцию классов в наборе поездов и тестов, которая присутствует во всем исходном наборе данных. Этот параметр гарантирует, что разделенные данные имеют хотя бы некоторое сходство между данными поезда и тестовыми данными: -

Затем я определил class_weights, который будет использоваться для размещения X_train и y_train в модели и используется для балансировки весов классов для достижения большей точности. Я выбрал XGBClassifier в качестве модели, потому что обнаружил, что XGBoost дает лучшую точность, чем многие другие модели. XGBoost - эффективная модель машинного обучения, даже для наборов данных, в которых распределение классов искажено. Хотя XGBoost не является частью библиотеки sklearn, он совместим и хорошо подходит, так как я, тем не менее, смог использовать несколько функций sklearn с этой моделью . Используя эту методологию, мне удалось достичь точности 99,95% на обучающей выборке: -

Когда я спрогнозировал набор валидации для модели, которую я точно настроил, я получил точность 82,12%:

Я использовал команду pred_proba (), чтобы предсказать вероятность того, что человек будет заинтересован в покупке страховки:

Когда я отправил свой прогноз в Analytics Vidhya, я набрал 80,77%, что неплохо, учитывая, что наивысший балл в этом соревновании составил 86,39%: -

Код, использованный в этом сообщении блога, можно полностью найти в моей учетной записи github, которая находится ниже: - https://github.com/TracyRenee61/Misc-Predictions/blob/main/AV_Insurance_XGBC.ipynb