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

В этой статье мы увидим, как мы можем прогнозировать стоимость страхового взноса для медицинского страхования с помощью машинного обучения, используя алгоритм Random Forest и TensorFlow в качестве нашего инструмента.

Я покажу код, который написал в блокноте, так что не удивляйтесь, если тут и там будут операторы импорта.

Вы можете получить набор данных, который я использую здесь: https://www.kaggle.com/datasets/mirichoi0218/insurance. Затем поместите его в тот же каталог, что и блокнот.

Сначала мы импортируем все основные пакеты.

Затем давайте преобразуем наши данные CSV в фрейм данных.

Вы можете получить представление о том, как выглядит набор данных, распечатав первые 5 строк.

У нас есть как числовые, так и категориальные столбцы/функции. Столбец сборов — это тот, который мы хотим предсказать. Теперь мы хотим узнать, есть ли неполная строка — имеющая нулевое значение — которую нам нужно очистить.

К счастью для нас, нет.

Теперь мы хотим посмотреть на гистограмму наших столбцов. Мне нужно по-разному относиться к категориальным столбцам, поскольку с помощью функции hist можно отображать только числовые столбцы.

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

TRAINING
train_set["sex"].value_counts() / len(train_set)
male      0.505607
female    0.494393
TEST
test_set["sex"].value_counts() / len(test_set)
male      0.503731
female    0.496269

Как видите, соотношение полов между обоими наборами почти равное.

Давайте заменим переменную insurance на набор поездов.

Наши данные еще не готовы к использованию. Есть два преобразования, которые я хочу применить:

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

Самый простой способ применить эти преобразования — создать конвейер, как показано ниже:

Теперь нам нужно создать нашу модель. Но есть некоторые гиперпараметры, которые нужно настроить, чтобы получить наилучший результат. Искать их вручную очень утомительно. Для этого мы можем использовать поиск по сетке.

Мы можем получить лучший исполнитель модели, используя эту строку кода:

final_model = grid_search.best_estimator_

Мы можем попробовать запустить эту модель на нашем тестовом наборе, чтобы увидеть, насколько хорошо она работает. Я использовал среднеквадратичную ошибку, которая дает больший штраф за большую ошибку.

На моем конце здесь я получил final_rmse из 4680.179. А ты? 😀

Это все для этой статьи. Если у вас есть предложения по улучшению предиктора, вы можете оставить их в разделе комментариев. Спасибо!