866 lines
228 KiB
Plaintext
Raw Normal View History

2025-02-18 14:53:27 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вариантс2. [Набор данных для анализа и прогнозирования сердечного приступа](https://www.kaggle.com/datasets/kamilpytlak/personal-key-indicators-of-heart-disease)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('../data/heart_2022_no_nans.csv')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 246022 entries, 0 to 246021\n",
"Data columns (total 40 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 State 246022 non-null object \n",
" 1 Sex 246022 non-null object \n",
" 2 GeneralHealth 246022 non-null object \n",
" 3 PhysicalHealthDays 246022 non-null float64\n",
" 4 MentalHealthDays 246022 non-null float64\n",
" 5 LastCheckupTime 246022 non-null object \n",
" 6 PhysicalActivities 246022 non-null object \n",
" 7 SleepHours 246022 non-null float64\n",
" 8 RemovedTeeth 246022 non-null object \n",
" 9 HadHeartAttack 246022 non-null object \n",
" 10 HadAngina 246022 non-null object \n",
" 11 HadStroke 246022 non-null object \n",
" 12 HadAsthma 246022 non-null object \n",
" 13 HadSkinCancer 246022 non-null object \n",
" 14 HadCOPD 246022 non-null object \n",
" 15 HadDepressiveDisorder 246022 non-null object \n",
" 16 HadKidneyDisease 246022 non-null object \n",
" 17 HadArthritis 246022 non-null object \n",
" 18 HadDiabetes 246022 non-null object \n",
" 19 DeafOrHardOfHearing 246022 non-null object \n",
" 20 BlindOrVisionDifficulty 246022 non-null object \n",
" 21 DifficultyConcentrating 246022 non-null object \n",
" 22 DifficultyWalking 246022 non-null object \n",
" 23 DifficultyDressingBathing 246022 non-null object \n",
" 24 DifficultyErrands 246022 non-null object \n",
" 25 SmokerStatus 246022 non-null object \n",
" 26 ECigaretteUsage 246022 non-null object \n",
" 27 ChestScan 246022 non-null object \n",
" 28 RaceEthnicityCategory 246022 non-null object \n",
" 29 AgeCategory 246022 non-null object \n",
" 30 HeightInMeters 246022 non-null float64\n",
" 31 WeightInKilograms 246022 non-null float64\n",
" 32 BMI 246022 non-null float64\n",
" 33 AlcoholDrinkers 246022 non-null object \n",
" 34 HIVTesting 246022 non-null object \n",
" 35 FluVaxLast12 246022 non-null object \n",
" 36 PneumoVaxEver 246022 non-null object \n",
" 37 TetanusLast10Tdap 246022 non-null object \n",
" 38 HighRiskLastYear 246022 non-null object \n",
" 39 CovidPos 246022 non-null object \n",
"dtypes: float64(6), object(34)\n",
"memory usage: 75.1+ MB\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PhysicalHealthDays</th>\n",
" <td>246022.0</td>\n",
" <td>4.119026</td>\n",
" <td>8.405844</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>3.00</td>\n",
" <td>30.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MentalHealthDays</th>\n",
" <td>246022.0</td>\n",
" <td>4.167140</td>\n",
" <td>8.102687</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>4.00</td>\n",
" <td>30.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SleepHours</th>\n",
" <td>246022.0</td>\n",
" <td>7.021331</td>\n",
" <td>1.440681</td>\n",
" <td>1.00</td>\n",
" <td>6.00</td>\n",
" <td>7.00</td>\n",
" <td>8.00</td>\n",
" <td>24.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HeightInMeters</th>\n",
" <td>246022.0</td>\n",
" <td>1.705150</td>\n",
" <td>0.106654</td>\n",
" <td>0.91</td>\n",
" <td>1.63</td>\n",
" <td>1.70</td>\n",
" <td>1.78</td>\n",
" <td>2.41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>WeightInKilograms</th>\n",
" <td>246022.0</td>\n",
" <td>83.615179</td>\n",
" <td>21.323156</td>\n",
" <td>28.12</td>\n",
" <td>68.04</td>\n",
" <td>81.65</td>\n",
" <td>95.25</td>\n",
" <td>292.57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMI</th>\n",
" <td>246022.0</td>\n",
" <td>28.668136</td>\n",
" <td>6.513973</td>\n",
" <td>12.02</td>\n",
" <td>24.27</td>\n",
" <td>27.46</td>\n",
" <td>31.89</td>\n",
" <td>97.65</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% \\\n",
"PhysicalHealthDays 246022.0 4.119026 8.405844 0.00 0.00 0.00 \n",
"MentalHealthDays 246022.0 4.167140 8.102687 0.00 0.00 0.00 \n",
"SleepHours 246022.0 7.021331 1.440681 1.00 6.00 7.00 \n",
"HeightInMeters 246022.0 1.705150 0.106654 0.91 1.63 1.70 \n",
"WeightInKilograms 246022.0 83.615179 21.323156 28.12 68.04 81.65 \n",
"BMI 246022.0 28.668136 6.513973 12.02 24.27 27.46 \n",
"\n",
" 75% max \n",
"PhysicalHealthDays 3.00 30.00 \n",
"MentalHealthDays 4.00 30.00 \n",
"SleepHours 8.00 24.00 \n",
"HeightInMeters 1.78 2.41 \n",
"WeightInKilograms 95.25 292.57 \n",
"BMI 31.89 97.65 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.info()\n",
"df.describe().transpose()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0., 15., 4., 25., 5., 30., 27., 3., 2., 1., 10., 20., 21.,\n",
" 6., 7., 8., 14., 9., 12., 18., 29., 28., 17., 11., 16., 13.,\n",
" 26., 22., 24., 19., 23.])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_cleaned = df.drop(columns=list(filter(lambda x: not pd.api.types.is_numeric_dtype(df[x]), df.columns)))\n",
"df_cleaned['MentalHealthDays'].unique()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Создадим лингвистические переменные\n",
"\n",
"Входные:\n",
"- SleepHours - количество часов сна\n",
"- BMI - индекс массы тела\n",
"\n",
"Выходные:\n",
"- HadStroke - наличие сердечного приступа"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from skfuzzy import control as ctrl\n",
"\n",
"sleep = ctrl.Antecedent(np.arange(df[\"SleepHours\"].min(), df[\"SleepHours\"].max() + 1, 1), \"SleepHours\")\n",
"bmi = ctrl.Antecedent(np.arange(df[\"BMI\"].min(), df[\"BMI\"].max() + 0.1, 0.1), \"BMI\")\n",
"had_stroke = ctrl.Consequent(np.arange(0, 1 + 0.01, 0.01), \"HadStroke\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Произведем настройку"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/nspotapov/ulstu/AIM-PIbd-31-Potapov-N-S/lab_7/.venv/lib/python3.12/site-packages/skfuzzy/control/fuzzyvariable.py:125: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import skfuzzy as fuzz\n",
"\n",
"sleep[\"low\"] = fuzz.zmf(sleep.universe, 0, 6)\n",
"sleep[\"normal\"] = fuzz.trapmf(sleep.universe, [4, 6, 10, 12])\n",
"sleep[\"much\"] = fuzz.smf(sleep.universe, 10, 14)\n",
"sleep.view()\n",
"\n",
"bmi[\"low\"] = fuzz.zmf(bmi.universe, 12, 18.5)\n",
"bmi[\"normal\"] = fuzz.trapmf(bmi.universe, [16, 18.5, 25, 30])\n",
"bmi[\"much\"] = fuzz.smf(bmi.universe, 25, 40)\n",
"bmi.view()\n",
"\n",
"# Определение функций принадлежности для had_stroke\n",
"had_stroke[\"low\"] = fuzz.zmf(had_stroke.universe, 0, 0.01) # Низкая вероятность (менее 1%)\n",
"had_stroke[\"moderate\"] = fuzz.trapmf(had_stroke.universe, [0.005, 0.01, 0.05, 0.1]) # Умеренная вероятность (1% - 5%)\n",
"had_stroke[\"high\"] = fuzz.trapmf(had_stroke.universe, [0.01, 0.05, 0.1, 0.2]) # Высокая вероятность (5% - 10%)\n",
"had_stroke[\"very_high\"] = fuzz.smf(had_stroke.universe, 0.1, 0.15) # Очень высокая вероятность (более 10%)\n",
"\n",
"# Визуализация функций принадлежности\n",
"had_stroke.view()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сформируем базу нечетких правил\n",
"\n",
"Объяснение правил:\n",
"\n",
"Правило 1: Если часы сна низкие (low) и ИМТ низкий (low), то вероятность сердечного приступа низкая (low).\n",
"\n",
"Правило 2: Если часы сна низкие (low) и ИМТ нормальный (normal), то вероятность сердечного приступа умеренная (moderate).\n",
"\n",
"Правило 3: Если часы сна низкие (low) и ИМТ высокий (much), то вероятность сердечного приступа высокая (high).\n",
"\n",
"Правило 4: Если часы сна нормальные (normal) и ИМТ низкий (low), то вероятность сердечного приступа низкая (low).\n",
"\n",
"Правило 5: Если часы сна нормальные (normal) и ИМТ нормальный (normal), то вероятность сердечного приступа низкая (low).\n",
"\n",
"Правило 6: Если часы сна нормальные (normal) и ИМТ высокий (much), то вероятность сердечного приступа умеренная (moderate).\n",
"\n",
"Правило 7: Если часы сна высокие (much) и ИМТ низкий (low), то вероятность сердечного приступа низкая (low).\n",
"\n",
"Правило 8: Если часы сна высокие (much) и ИМТ нормальный (normal), то вероятность сердечного приступа низкая (low).\n",
"\n",
"Правило 9: Если часы сна высокие (much) и ИМТ высокий (much), то вероятность сердечного приступа умеренная (moderate).\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"rules = [\n",
" ctrl.Rule(sleep['low'] & bmi['low'], had_stroke['low']),\n",
" ctrl.Rule(sleep['low'] & bmi['normal'], had_stroke['moderate']),\n",
" ctrl.Rule(sleep['low'] & bmi['much'], had_stroke['high']),\n",
" ctrl.Rule(sleep['normal'] & bmi['low'], had_stroke['low']),\n",
" ctrl.Rule(sleep['normal'] & bmi['normal'], had_stroke['low']),\n",
" ctrl.Rule(sleep['normal'] & bmi['much'], had_stroke['moderate']),\n",
" ctrl.Rule(sleep['much'] & bmi['low'], had_stroke['low']),\n",
" ctrl.Rule(sleep['much'] & bmi['normal'], had_stroke['low']),\n",
" ctrl.Rule(sleep['much'] & bmi['much'], had_stroke['moderate']),\n",
"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Создадим нечеткую систему и добавим созданные нечеткие правила в ее базу знаний"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/nspotapov/ulstu/AIM-PIbd-31-Potapov-N-S/lab_7/.venv/lib/python3.12/site-packages/skfuzzy/control/controlsystem.py:135: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Создание системы управления и добавление правил\n",
"stroke_ctrl = ctrl.ControlSystem(rules)\n",
"\n",
"# Создание симуляции\n",
"stroke_simulation = ctrl.ControlSystemSimulation(stroke_ctrl)\n",
"\n",
"# Теперь можно визуализировать правила\n",
"stroke_ctrl.view()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: SleepHours = 5\n",
" - low : 0.05555555555555555\n",
" - normal : 0.5\n",
" - much : 0.0\n",
"Antecedent: BMI = 22\n",
" - low : 0.0\n",
" - normal : 1.0\n",
" - much : 0.0\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF SleepHours[low] AND BMI[low] THEN HadStroke[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[low] : 0.05555555555555555\n",
" - BMI[low] : 0.0\n",
" SleepHours[low] AND BMI[low] = 0.0\n",
" Activation (THEN-clause):\n",
" HadStroke[low] : 0.0\n",
"\n",
"RULE #1:\n",
" IF SleepHours[low] AND BMI[normal] THEN HadStroke[moderate]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[low] : 0.05555555555555555\n",
" - BMI[normal] : 1.0\n",
" SleepHours[low] AND BMI[normal] = 0.05555555555555555\n",
" Activation (THEN-clause):\n",
" HadStroke[moderate] : 0.05555555555555555\n",
"\n",
"RULE #2:\n",
" IF SleepHours[low] AND BMI[much] THEN HadStroke[high]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[low] : 0.05555555555555555\n",
" - BMI[much] : 0.0\n",
" SleepHours[low] AND BMI[much] = 0.0\n",
" Activation (THEN-clause):\n",
" HadStroke[high] : 0.0\n",
"\n",
"RULE #3:\n",
" IF SleepHours[normal] AND BMI[low] THEN HadStroke[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[normal] : 0.5\n",
" - BMI[low] : 0.0\n",
" SleepHours[normal] AND BMI[low] = 0.0\n",
" Activation (THEN-clause):\n",
" HadStroke[low] : 0.0\n",
"\n",
"RULE #4:\n",
" IF SleepHours[normal] AND BMI[normal] THEN HadStroke[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[normal] : 0.5\n",
" - BMI[normal] : 1.0\n",
" SleepHours[normal] AND BMI[normal] = 0.5\n",
" Activation (THEN-clause):\n",
" HadStroke[low] : 0.5\n",
"\n",
"RULE #5:\n",
" IF SleepHours[normal] AND BMI[much] THEN HadStroke[moderate]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[normal] : 0.5\n",
" - BMI[much] : 0.0\n",
" SleepHours[normal] AND BMI[much] = 0.0\n",
" Activation (THEN-clause):\n",
" HadStroke[moderate] : 0.0\n",
"\n",
"RULE #6:\n",
" IF SleepHours[much] AND BMI[low] THEN HadStroke[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[much] : 0.0\n",
" - BMI[low] : 0.0\n",
" SleepHours[much] AND BMI[low] = 0.0\n",
" Activation (THEN-clause):\n",
" HadStroke[low] : 0.0\n",
"\n",
"RULE #7:\n",
" IF SleepHours[much] AND BMI[normal] THEN HadStroke[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[much] : 0.0\n",
" - BMI[normal] : 1.0\n",
" SleepHours[much] AND BMI[normal] = 0.0\n",
" Activation (THEN-clause):\n",
" HadStroke[low] : 0.0\n",
"\n",
"RULE #8:\n",
" IF SleepHours[much] AND BMI[much] THEN HadStroke[moderate]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - SleepHours[much] : 0.0\n",
" - BMI[much] : 0.0\n",
" SleepHours[much] AND BMI[much] = 0.0\n",
" Activation (THEN-clause):\n",
" HadStroke[moderate] : 0.0\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: HadStroke = 0.032127197249789186\n",
" low:\n",
" Accumulate using accumulation_max : 0.5\n",
" moderate:\n",
" Accumulate using accumulation_max : 0.05555555555555555\n",
" high:\n",
" Accumulate using accumulation_max : 0.0\n",
" very_high:\n",
" Accumulate using accumulation_max : None\n",
"\n",
"0.032127197249789186\n"
]
}
],
"source": [
"stroke_simulation.input['SleepHours'] = 5 # Пример входного значения\n",
"stroke_simulation.input['BMI'] = 22 # Пример входного значения\n",
"stroke_simulation.compute()\n",
"stroke_simulation.print_state()\n",
"stroke_p = stroke_simulation.output['HadStroke']\n",
"print(stroke_p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализация функции принадлежности для выходной переменной had_stroke\n",
"\n",
"Функция получена в процессе аккумуляции и используется для дефаззификации значения выходной переменной had_stroke"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"had_stroke.view(sim=stroke_simulation)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сравним результаты работы системы с реальными данными"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def fuzzy_pred(row):\n",
" stroke_simulation.input[\"SleepHours\"] = row[\"SleepHours\"]\n",
" stroke_simulation.input[\"BMI\"] = row[\"BMI\"]\n",
" stroke_simulation.compute()\n",
" return stroke_simulation.output[\"HadStroke\"]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SleepHours</th>\n",
" <th>BMI</th>\n",
" <th>HadStroke</th>\n",
" <th>HadStrokePredicted</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>231476</th>\n",
" <td>8.0</td>\n",
" <td>23.03</td>\n",
" <td>0</td>\n",
" <td>0.003333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>236378</th>\n",
" <td>8.0</td>\n",
" <td>30.68</td>\n",
" <td>0</td>\n",
" <td>0.047222</td>\n",
" </tr>\n",
" <tr>\n",
" <th>109247</th>\n",
" <td>5.0</td>\n",
" <td>33.82</td>\n",
" <td>0</td>\n",
" <td>0.057174</td>\n",
" </tr>\n",
" <tr>\n",
" <th>69198</th>\n",
" <td>8.0</td>\n",
" <td>24.39</td>\n",
" <td>0</td>\n",
" <td>0.003333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>133337</th>\n",
" <td>7.0</td>\n",
" <td>24.84</td>\n",
" <td>0</td>\n",
" <td>0.003333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>93935</th>\n",
" <td>7.0</td>\n",
" <td>24.03</td>\n",
" <td>0</td>\n",
" <td>0.003333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>218410</th>\n",
" <td>9.0</td>\n",
" <td>31.32</td>\n",
" <td>0</td>\n",
" <td>0.046591</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100042</th>\n",
" <td>6.0</td>\n",
" <td>30.41</td>\n",
" <td>0</td>\n",
" <td>0.047472</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58400</th>\n",
" <td>8.0</td>\n",
" <td>31.01</td>\n",
" <td>0</td>\n",
" <td>0.046903</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35904</th>\n",
" <td>6.0</td>\n",
" <td>20.94</td>\n",
" <td>0</td>\n",
" <td>0.003333</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2460 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" SleepHours BMI HadStroke HadStrokePredicted\n",
"231476 8.0 23.03 0 0.003333\n",
"236378 8.0 30.68 0 0.047222\n",
"109247 5.0 33.82 0 0.057174\n",
"69198 8.0 24.39 0 0.003333\n",
"133337 7.0 24.84 0 0.003333\n",
"... ... ... ... ...\n",
"93935 7.0 24.03 0 0.003333\n",
"218410 9.0 31.32 0 0.046591\n",
"100042 6.0 30.41 0 0.047472\n",
"58400 8.0 31.01 0 0.046903\n",
"35904 6.0 20.94 0 0.003333\n",
"\n",
"[2460 rows x 4 columns]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = df.copy()\n",
"result = result.sample(frac=0.01)\n",
"result[\"HadStrokePredicted\"] = result.apply(fuzzy_pred, axis=1)\n",
"result[\"HadStroke\"] = result.apply(lambda x: 1 if x[\"HadStroke\"] == 'Yes' else 0, axis=1)\n",
"result.loc[:, [\"SleepHours\", \"BMI\", \"HadStroke\", \"HadStrokePredicted\"]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценим эти результаты с помощью метрик для задачи регрессии"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'RMSE': 0.1888734235934381,\n",
" 'RMAE': 0.251645328415333,\n",
" 'R2': -0.0013951099998465999}"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"from sklearn import metrics\n",
"\n",
"rmetrics = {}\n",
"rmetrics[\"RMSE\"] = math.sqrt(\n",
" metrics.mean_squared_error(result[\"HadStroke\"], result[\"HadStrokePredicted\"])\n",
")\n",
"rmetrics[\"RMAE\"] = math.sqrt(\n",
" metrics.mean_absolute_error(result[\"HadStroke\"], result[\"HadStrokePredicted\"])\n",
")\n",
"rmetrics[\"R2\"] = metrics.r2_score(\n",
" result[\"HadStroke\"], result[\"HadStrokePredicted\"]\n",
")\n",
"\n",
"rmetrics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод\n",
"\n",
"Значение RMSE=0.1889 может считаться относительно небольшим, но его интерпретация зависит от масштаба данных. Если целевая переменная (например, вероятность сердечного приступа) находится в диапазоне от 0 до 1, то ошибка в 0.1889 может быть значительной.\n",
"\n",
"Значение RMAE=0.2516 также указывает на значительные ошибки в предсказаниях. Это подтверждает, что модель плохо справляется с задачей.\n",
"\n",
"Отрицательное значение R² (-0.0014) указывает на то, что модель работает хуже, чем простое предсказание среднего значения целевой переменной. Это явный признак того, что модель не подходит для данных.\n",
"\n",
"Заключение\n",
"\n",
"Исходя из оценок, модель неэффективна для предсказания сердечного приступа на основе выбранных признаков. Необходимо пересмотреть подход к построению модели, улучшить данные и, возможно, использовать более подходящие методы машинного обучения."
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}