Введение:

Медицинские расходы часто могут быть серьезной проблемой для отдельных лиц и семей. Прогнозирование этих затрат может иметь серьезные последствия для страховых компаний, поставщиков медицинских услуг и политиков. В этом сообщении блога мы углубимся в мир прогнозирования медицинских расходов с использованием линейной регрессии. Мы проведем вас через весь процесс: от загрузки набора данных до оценки производительности модели, предоставляя примеры кода на каждом этапе.

Ссылка на набор данных: https: Набор данных о медицинских расходах

Ссылка на блокнот: Прогнозирование медицинских затрат с помощью линейной регрессии

Профиль в LinkedIn: Нандита Поре

Профиль Kaggle: Нандита Поре

  1. Импорт основных библиотек

Давайте начнем с загрузки набора данных о медицинских расходах и краткого рассмотрения его структуры.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

Конечно, вот краткое объяснение каждой библиотеки:

Pandas (импортировать pandas как pd): Pandas помогает эффективно управлять структурированными данными и анализировать их. Он используется для загрузки, изучения и предварительной обработки наборов данных, представляя данные в табличной форме.

Matplotlib (импортировать matplotlib.pyplot как plt): Matplotlib поддерживает создание различных типов графиков и диаграмм. Здесь он используется для визуализации взаимосвязей между переменными, такими как возраст и расходы на медицинское обслуживание.

NumPy (импортировать numpy как np): NumPy необходим для числовых вычислений и операций с массивами. Он используется для создания массивов, выполнения вычислений и обработки числовых данных.

Scikit-Learn (из sklearn.model_selection import train_test_split):Scikit-Learn предоставляет инструменты для задач машинного обучения. Функция train_test_split разделяет данные на наборы для обучения и тестирования, помогая оценить модель.

Линейная регрессия Scikit-Learn (из sklearn.linear_model import LinearReprofit): Класс LinearRegression Scikit-Learn позволяет создавать и обучать модели линейной регрессии. Он используется для построения модели прогнозирования медицинских расходов.

Метрики Scikit-Learn (из sklearn.metrics importmean_squared_error, r2_score):Метрики Scikit-Learn предлагают способы измерения производительности модели. mean_squared_error и r2_score оценивают, насколько хорошо прогнозы модели совпадают с фактическими данными.

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

2.Загрузка набора данных

df = pd.read_csv('/kaggle/input/medical-cost-dataset/medical_cost.csv')
  • pd.read_csv(...): это функция Pandas, которая считывает данные из файла CSV.
  • '/kaggle/input/medical-cost-dataset/medical_cost.csv': это путь к файлу набора данных CSV.
  • df: это переменная Pandas DataFrame, в которой загруженные данные сохраняются для анализа и обработки.

3.Предварительная обработка набора данных

Прежде чем мы сможем использовать набор данных для построения модели линейной регрессии, нам необходимо его предварительно обработать. Это включает в себя преобразование категориальных переменных в числовые значения и разделение данных на признаки (X) и целевые (y) переменные.

# Convert 'smoker' column to numerical values (binary encoding)
df['smoker'] = df['smoker'].map({'yes': 1, 'no': 0})

# Prepare the data
X = df[['age', 'bmi', 'children', 'smoker']]
y = df['charges']

4. Разделение данных

Далее мы разделим набор данных на обучающий и тестовый наборы. Это позволяет нам обучать модель на одной части данных и оценивать ее производительность на другой.

from sklearn.model_selection import train_test_split

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

5. Построение и обучение модели линейной регрессии

Теперь пришло время создать модель линейной регрессии и обучить ее, используя обучающие данные.

from sklearn.linear_model import LinearRegression

# Create a linear regression model
model = LinearRegression()

# Train the model on the training data
model.fit(X_train, y_train)

6. Прогнозирование обвинений

Давайте спрогнозируем расходы на медицинское обслуживание на основе возрастной переменной, сохраняя при этом другие переменные постоянными.

# Predict charges based on the age variable
age_range = np.linspace(min(X['age']), max(X['age']), 100).reshape(-1, 1)
constant_vars = np.mean(X[['bmi', 'children', 'smoker']], axis=0).values.reshape(1, -1)
X_constant = np.hstack((age_range, np.tile(constant_vars, (age_range.shape[0], 1))))
predicted_charges = model.predict(X_constant)
  • age_range: Создает массив из 100 равномерно распределенных значений в диапазоне возрастов в наборе данных. Это делается с помощью np.linspace(...).
  • constant_vars: вычисляет средние значения переменных «ИМТ», «дети» и «курильщик». Они будут оставаться постоянными для прогнозирования. Результат преобразуется в массив строк с использованием np.mean(...) и reshape(...).
  • X_constant: объединяет «age_range» с повторяющимися «constant_vars» для формирования матрицы входных признаков для прогнозирования. Это делается с помощью np.hstack(...) и np.tile(...).
  • predicted_charges: использует обученную модель линейной регрессии (model) для прогнозирования расходов на медицинское обслуживание на основе объединенной входной матрицы (X_constant).

7.Визуализация результатов

Мы визуализируем фактические заряды и прогнозируемую линию с помощью диаграммы рассеяния.

# Create a scatter plot of actual vs. predicted charges
plt.figure(figsize=(10, 6))
plt.scatter(X_test['age'], y_test, label="Actual Charges", alpha=0.7)
plt.plot(age_range, predicted_charges, color='red', label="Predicted Line")
plt.xlabel("Age")
plt.ylabel("Charges")
plt.title("Actual vs. Predicted Charges")
plt.legend()
plt.show()

8. Оценка модели

Чтобы оценить производительность модели, мы рассчитаем среднеквадратическую ошибку (MSE) и значение R-квадрата.

# Evaluate the model
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("Mean Squared Error:", mse)
print("R-squared:", r2)
Mean Squared Error: 33981653.95019776
R-squared: 0.7811147722517886

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

Среднеквадратическая ошибка (MSE), равная примерно 33 981 653, указывает на среднеквадратическую разницу между прогнозируемыми и фактическими расходами на медицинское обслуживание. Более низкие значения MSE указывают на более высокую точность прогнозирования, и хотя полученное здесь значение не является чрезвычайно низким, оно предполагает, что модель отражает значительную часть различий в медицинских расходах.

Значение R-квадрата, равное примерно 0,781, предполагает, что около78,11% различий в расходах на медицинское обслуживание можно объяснить возрастной переменной при сохранении других переменные постоянные. R-квадрат — это мера того, насколько хорошо модель соответствует данным, причем значения ближе к 1 указывают на лучшее соответствие. R-квадрат 0,781 указывает на относительно сильную связь между возрастом и расходами на медицинское обслуживание.

В заключение этот линейный регрессионный анализ подчеркивает значительное влияние возраста на расходы на медицинское обслуживание при учете других факторов, таких как ИМТ, количество детей и привычка курить. Эффективность модели, о которой свидетельствуют MSE и R-квадрат, предполагает, что возраст является важным предиктором медицинских расходов. Однако дальнейшее уточнение и учет дополнительных переменных может привести к еще более точным прогнозам. Этот анализ закладывает основу для будущих исследований более полных моделей прогнозирования медицинских расходов.