Введение:
Медицинские расходы часто могут быть серьезной проблемой для отдельных лиц и семей. Прогнозирование этих затрат может иметь серьезные последствия для страховых компаний, поставщиков медицинских услуг и политиков. В этом сообщении блога мы углубимся в мир прогнозирования медицинских расходов с использованием линейной регрессии. Мы проведем вас через весь процесс: от загрузки набора данных до оценки производительности модели, предоставляя примеры кода на каждом этапе.
Ссылка на набор данных: https: Набор данных о медицинских расходах
Ссылка на блокнот: Прогнозирование медицинских затрат с помощью линейной регрессии
Профиль в LinkedIn: Нандита Поре
Профиль Kaggle: Нандита Поре
- Импорт основных библиотек
Давайте начнем с загрузки набора данных о медицинских расходах и краткого рассмотрения его структуры.
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-квадрат, предполагает, что возраст является важным предиктором медицинских расходов. Однако дальнейшее уточнение и учет дополнительных переменных может привести к еще более точным прогнозам. Этот анализ закладывает основу для будущих исследований более полных моделей прогнозирования медицинских расходов.