fuzzy-rules-generator/cardio.ipynb

2188 lines
106 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 403,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cardio\n",
"0 35021\n",
"1 34979\n",
"Name: count, dtype: int64\n",
"<class 'pandas.core.frame.DataFrame'>\n",
"Index: 70000 entries, 0 to 99999\n",
"Data columns (total 12 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 age 70000 non-null float64\n",
" 1 gender 70000 non-null int64 \n",
" 2 height 70000 non-null int64 \n",
" 3 weight 70000 non-null float64\n",
" 4 ap_hi 70000 non-null int64 \n",
" 5 ap_lo 70000 non-null int64 \n",
" 6 cholesterol 70000 non-null int64 \n",
" 7 gluc 70000 non-null int64 \n",
" 8 smoke 70000 non-null int64 \n",
" 9 alco 70000 non-null int64 \n",
" 10 active 70000 non-null int64 \n",
" 11 cardio 70000 non-null int64 \n",
"dtypes: float64(2), int64(10)\n",
"memory usage: 6.9 MB\n"
]
},
{
"data": {
"text/plain": [
"None"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"cardio\n",
"0 35021\n",
"1 34979\n",
"Name: count, dtype: int64"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>age</th>\n",
" <th>gender</th>\n",
" <th>height</th>\n",
" <th>weight</th>\n",
" <th>ap_hi</th>\n",
" <th>ap_lo</th>\n",
" <th>cholesterol</th>\n",
" <th>gluc</th>\n",
" <th>smoke</th>\n",
" <th>alco</th>\n",
" <th>active</th>\n",
" <th>cardio</th>\n",
" </tr>\n",
" <tr>\n",
" <th>id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>50.358668</td>\n",
" <td>2</td>\n",
" <td>168</td>\n",
" <td>62.0</td>\n",
" <td>110</td>\n",
" <td>80</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>55.382762</td>\n",
" <td>1</td>\n",
" <td>156</td>\n",
" <td>85.0</td>\n",
" <td>140</td>\n",
" <td>90</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>51.629066</td>\n",
" <td>1</td>\n",
" <td>165</td>\n",
" <td>64.0</td>\n",
" <td>130</td>\n",
" <td>70</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>48.250465</td>\n",
" <td>2</td>\n",
" <td>169</td>\n",
" <td>82.0</td>\n",
" <td>150</td>\n",
" <td>100</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>47.842515</td>\n",
" <td>1</td>\n",
" <td>156</td>\n",
" <td>56.0</td>\n",
" <td>100</td>\n",
" <td>60</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99993</th>\n",
" <td>52.677691</td>\n",
" <td>2</td>\n",
" <td>168</td>\n",
" <td>76.0</td>\n",
" <td>120</td>\n",
" <td>80</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99995</th>\n",
" <td>61.879860</td>\n",
" <td>1</td>\n",
" <td>158</td>\n",
" <td>126.0</td>\n",
" <td>140</td>\n",
" <td>90</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99996</th>\n",
" <td>52.201292</td>\n",
" <td>2</td>\n",
" <td>183</td>\n",
" <td>105.0</td>\n",
" <td>180</td>\n",
" <td>90</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99998</th>\n",
" <td>61.414412</td>\n",
" <td>1</td>\n",
" <td>163</td>\n",
" <td>72.0</td>\n",
" <td>135</td>\n",
" <td>80</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99999</th>\n",
" <td>56.236995</td>\n",
" <td>1</td>\n",
" <td>170</td>\n",
" <td>72.0</td>\n",
" <td>120</td>\n",
" <td>80</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>70000 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" age gender height weight ap_hi ap_lo cholesterol gluc \\\n",
"id \n",
"0 50.358668 2 168 62.0 110 80 1 1 \n",
"1 55.382762 1 156 85.0 140 90 3 1 \n",
"2 51.629066 1 165 64.0 130 70 3 1 \n",
"3 48.250465 2 169 82.0 150 100 1 1 \n",
"4 47.842515 1 156 56.0 100 60 1 1 \n",
"... ... ... ... ... ... ... ... ... \n",
"99993 52.677691 2 168 76.0 120 80 1 1 \n",
"99995 61.879860 1 158 126.0 140 90 2 2 \n",
"99996 52.201292 2 183 105.0 180 90 3 1 \n",
"99998 61.414412 1 163 72.0 135 80 1 2 \n",
"99999 56.236995 1 170 72.0 120 80 2 1 \n",
"\n",
" smoke alco active cardio \n",
"id \n",
"0 0 0 1 0 \n",
"1 0 0 1 1 \n",
"2 0 0 0 1 \n",
"3 0 0 1 1 \n",
"4 0 0 0 0 \n",
"... ... ... ... ... \n",
"99993 1 0 1 0 \n",
"99995 0 0 1 1 \n",
"99996 0 1 0 1 \n",
"99998 0 0 0 1 \n",
"99999 0 0 1 0 \n",
"\n",
"[70000 rows x 12 columns]"
]
},
"execution_count": 403,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.read_csv(\"data-cardio/cardio_train.csv\", sep=\";\", index_col=\"id\")\n",
"df[\"age\"] = df[\"age\"] / 365.24\n",
"print(df.cardio.value_counts())\n",
"display(df.info(), df.cardio.value_counts())\n",
"\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 404,
"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>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>age</th>\n",
" <td>70000.0</td>\n",
" <td>53.304309</td>\n",
" <td>6.755152</td>\n",
" <td>29.564122</td>\n",
" <td>48.36272</td>\n",
" <td>53.945351</td>\n",
" <td>58.391742</td>\n",
" <td>64.924433</td>\n",
" </tr>\n",
" <tr>\n",
" <th>gender</th>\n",
" <td>70000.0</td>\n",
" <td>1.349571</td>\n",
" <td>0.476838</td>\n",
" <td>1.000000</td>\n",
" <td>1.00000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>height</th>\n",
" <td>70000.0</td>\n",
" <td>164.359229</td>\n",
" <td>8.210126</td>\n",
" <td>55.000000</td>\n",
" <td>159.00000</td>\n",
" <td>165.000000</td>\n",
" <td>170.000000</td>\n",
" <td>250.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>weight</th>\n",
" <td>70000.0</td>\n",
" <td>74.205690</td>\n",
" <td>14.395757</td>\n",
" <td>10.000000</td>\n",
" <td>65.00000</td>\n",
" <td>72.000000</td>\n",
" <td>82.000000</td>\n",
" <td>200.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ap_hi</th>\n",
" <td>70000.0</td>\n",
" <td>128.817286</td>\n",
" <td>154.011419</td>\n",
" <td>-150.000000</td>\n",
" <td>120.00000</td>\n",
" <td>120.000000</td>\n",
" <td>140.000000</td>\n",
" <td>16020.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ap_lo</th>\n",
" <td>70000.0</td>\n",
" <td>96.630414</td>\n",
" <td>188.472530</td>\n",
" <td>-70.000000</td>\n",
" <td>80.00000</td>\n",
" <td>80.000000</td>\n",
" <td>90.000000</td>\n",
" <td>11000.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cholesterol</th>\n",
" <td>70000.0</td>\n",
" <td>1.366871</td>\n",
" <td>0.680250</td>\n",
" <td>1.000000</td>\n",
" <td>1.00000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" <td>3.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>gluc</th>\n",
" <td>70000.0</td>\n",
" <td>1.226457</td>\n",
" <td>0.572270</td>\n",
" <td>1.000000</td>\n",
" <td>1.00000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>smoke</th>\n",
" <td>70000.0</td>\n",
" <td>0.088129</td>\n",
" <td>0.283484</td>\n",
" <td>0.000000</td>\n",
" <td>0.00000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>alco</th>\n",
" <td>70000.0</td>\n",
" <td>0.053771</td>\n",
" <td>0.225568</td>\n",
" <td>0.000000</td>\n",
" <td>0.00000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>active</th>\n",
" <td>70000.0</td>\n",
" <td>0.803729</td>\n",
" <td>0.397179</td>\n",
" <td>0.000000</td>\n",
" <td>1.00000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cardio</th>\n",
" <td>70000.0</td>\n",
" <td>0.499700</td>\n",
" <td>0.500003</td>\n",
" <td>0.000000</td>\n",
" <td>0.00000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% \\\n",
"age 70000.0 53.304309 6.755152 29.564122 48.36272 \n",
"gender 70000.0 1.349571 0.476838 1.000000 1.00000 \n",
"height 70000.0 164.359229 8.210126 55.000000 159.00000 \n",
"weight 70000.0 74.205690 14.395757 10.000000 65.00000 \n",
"ap_hi 70000.0 128.817286 154.011419 -150.000000 120.00000 \n",
"ap_lo 70000.0 96.630414 188.472530 -70.000000 80.00000 \n",
"cholesterol 70000.0 1.366871 0.680250 1.000000 1.00000 \n",
"gluc 70000.0 1.226457 0.572270 1.000000 1.00000 \n",
"smoke 70000.0 0.088129 0.283484 0.000000 0.00000 \n",
"alco 70000.0 0.053771 0.225568 0.000000 0.00000 \n",
"active 70000.0 0.803729 0.397179 0.000000 1.00000 \n",
"cardio 70000.0 0.499700 0.500003 0.000000 0.00000 \n",
"\n",
" 50% 75% max \n",
"age 53.945351 58.391742 64.924433 \n",
"gender 1.000000 2.000000 2.000000 \n",
"height 165.000000 170.000000 250.000000 \n",
"weight 72.000000 82.000000 200.000000 \n",
"ap_hi 120.000000 140.000000 16020.000000 \n",
"ap_lo 80.000000 90.000000 11000.000000 \n",
"cholesterol 1.000000 2.000000 3.000000 \n",
"gluc 1.000000 1.000000 3.000000 \n",
"smoke 0.000000 0.000000 1.000000 \n",
"alco 0.000000 0.000000 1.000000 \n",
"active 1.000000 1.000000 1.000000 \n",
"cardio 0.000000 1.000000 1.000000 "
]
},
"execution_count": 404,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe().transpose()"
]
},
{
"cell_type": "code",
"execution_count": 405,
"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>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>age</th>\n",
" <td>68985.0</td>\n",
" <td>53.290421</td>\n",
" <td>6.757633</td>\n",
" <td>29.564122</td>\n",
" <td>48.340817</td>\n",
" <td>53.939875</td>\n",
" <td>58.380791</td>\n",
" <td>64.924433</td>\n",
" </tr>\n",
" <tr>\n",
" <th>gender</th>\n",
" <td>68985.0</td>\n",
" <td>1.348670</td>\n",
" <td>0.476553</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>height</th>\n",
" <td>68985.0</td>\n",
" <td>164.359672</td>\n",
" <td>8.204273</td>\n",
" <td>55.000000</td>\n",
" <td>159.000000</td>\n",
" <td>165.000000</td>\n",
" <td>170.000000</td>\n",
" <td>250.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>weight</th>\n",
" <td>68985.0</td>\n",
" <td>74.118961</td>\n",
" <td>14.328938</td>\n",
" <td>11.000000</td>\n",
" <td>65.000000</td>\n",
" <td>72.000000</td>\n",
" <td>82.000000</td>\n",
" <td>200.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ap_hi</th>\n",
" <td>68985.0</td>\n",
" <td>126.325027</td>\n",
" <td>17.698621</td>\n",
" <td>7.000000</td>\n",
" <td>120.000000</td>\n",
" <td>120.000000</td>\n",
" <td>140.000000</td>\n",
" <td>240.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ap_lo</th>\n",
" <td>68985.0</td>\n",
" <td>81.350482</td>\n",
" <td>9.805666</td>\n",
" <td>1.000000</td>\n",
" <td>80.000000</td>\n",
" <td>80.000000</td>\n",
" <td>90.000000</td>\n",
" <td>190.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cholesterol</th>\n",
" <td>68985.0</td>\n",
" <td>1.364384</td>\n",
" <td>0.678691</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>gluc</th>\n",
" <td>68985.0</td>\n",
" <td>1.225875</td>\n",
" <td>0.571822</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>smoke</th>\n",
" <td>68985.0</td>\n",
" <td>0.087860</td>\n",
" <td>0.283093</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>alco</th>\n",
" <td>68985.0</td>\n",
" <td>0.053591</td>\n",
" <td>0.225211</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>active</th>\n",
" <td>68985.0</td>\n",
" <td>0.803276</td>\n",
" <td>0.397525</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cardio</th>\n",
" <td>68985.0</td>\n",
" <td>0.494905</td>\n",
" <td>0.499978</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% \\\n",
"age 68985.0 53.290421 6.757633 29.564122 48.340817 \n",
"gender 68985.0 1.348670 0.476553 1.000000 1.000000 \n",
"height 68985.0 164.359672 8.204273 55.000000 159.000000 \n",
"weight 68985.0 74.118961 14.328938 11.000000 65.000000 \n",
"ap_hi 68985.0 126.325027 17.698621 7.000000 120.000000 \n",
"ap_lo 68985.0 81.350482 9.805666 1.000000 80.000000 \n",
"cholesterol 68985.0 1.364384 0.678691 1.000000 1.000000 \n",
"gluc 68985.0 1.225875 0.571822 1.000000 1.000000 \n",
"smoke 68985.0 0.087860 0.283093 0.000000 0.000000 \n",
"alco 68985.0 0.053591 0.225211 0.000000 0.000000 \n",
"active 68985.0 0.803276 0.397525 0.000000 1.000000 \n",
"cardio 68985.0 0.494905 0.499978 0.000000 0.000000 \n",
"\n",
" 50% 75% max \n",
"age 53.939875 58.380791 64.924433 \n",
"gender 1.000000 2.000000 2.000000 \n",
"height 165.000000 170.000000 250.000000 \n",
"weight 72.000000 82.000000 200.000000 \n",
"ap_hi 120.000000 140.000000 240.000000 \n",
"ap_lo 80.000000 90.000000 190.000000 \n",
"cholesterol 1.000000 1.000000 3.000000 \n",
"gluc 1.000000 1.000000 3.000000 \n",
"smoke 0.000000 0.000000 1.000000 \n",
"alco 0.000000 0.000000 1.000000 \n",
"active 1.000000 1.000000 1.000000 \n",
"cardio 0.000000 1.000000 1.000000 "
]
},
"execution_count": 405,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = df.query(\"ap_hi > 0 and ap_hi < 370\")\n",
"df = df.query(\"ap_lo > 0 and ap_lo < 370\")\n",
"df.describe().transpose()"
]
},
{
"cell_type": "code",
"execution_count": 406,
"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>age</th>\n",
" <th>gender</th>\n",
" <th>ap_hi</th>\n",
" <th>ap_lo</th>\n",
" <th>cholesterol</th>\n",
" <th>gluc</th>\n",
" <th>smoke</th>\n",
" <th>alco</th>\n",
" <th>active</th>\n",
" <th>cardio</th>\n",
" <th>bmi</th>\n",
" </tr>\n",
" <tr>\n",
" <th>id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>50.358668</td>\n",
" <td>2</td>\n",
" <td>110</td>\n",
" <td>80</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>21.967120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>55.382762</td>\n",
" <td>1</td>\n",
" <td>140</td>\n",
" <td>90</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>34.927679</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>51.629066</td>\n",
" <td>1</td>\n",
" <td>130</td>\n",
" <td>70</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>23.507805</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>48.250465</td>\n",
" <td>2</td>\n",
" <td>150</td>\n",
" <td>100</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>28.710479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>47.842515</td>\n",
" <td>1</td>\n",
" <td>100</td>\n",
" <td>60</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>23.011177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99993</th>\n",
" <td>52.677691</td>\n",
" <td>2</td>\n",
" <td>120</td>\n",
" <td>80</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>26.927438</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99995</th>\n",
" <td>61.879860</td>\n",
" <td>1</td>\n",
" <td>140</td>\n",
" <td>90</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>50.472681</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99996</th>\n",
" <td>52.201292</td>\n",
" <td>2</td>\n",
" <td>180</td>\n",
" <td>90</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>31.353579</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99998</th>\n",
" <td>61.414412</td>\n",
" <td>1</td>\n",
" <td>135</td>\n",
" <td>80</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>27.099251</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99999</th>\n",
" <td>56.236995</td>\n",
" <td>1</td>\n",
" <td>120</td>\n",
" <td>80</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>24.913495</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>68985 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" age gender ap_hi ap_lo cholesterol gluc smoke alco \\\n",
"id \n",
"0 50.358668 2 110 80 1 1 0 0 \n",
"1 55.382762 1 140 90 3 1 0 0 \n",
"2 51.629066 1 130 70 3 1 0 0 \n",
"3 48.250465 2 150 100 1 1 0 0 \n",
"4 47.842515 1 100 60 1 1 0 0 \n",
"... ... ... ... ... ... ... ... ... \n",
"99993 52.677691 2 120 80 1 1 1 0 \n",
"99995 61.879860 1 140 90 2 2 0 0 \n",
"99996 52.201292 2 180 90 3 1 0 1 \n",
"99998 61.414412 1 135 80 1 2 0 0 \n",
"99999 56.236995 1 120 80 2 1 0 0 \n",
"\n",
" active cardio bmi \n",
"id \n",
"0 1 0 21.967120 \n",
"1 1 1 34.927679 \n",
"2 0 1 23.507805 \n",
"3 1 1 28.710479 \n",
"4 0 0 23.011177 \n",
"... ... ... ... \n",
"99993 1 0 26.927438 \n",
"99995 1 1 50.472681 \n",
"99996 0 1 31.353579 \n",
"99998 0 1 27.099251 \n",
"99999 1 0 24.913495 \n",
"\n",
"[68985 rows x 11 columns]"
]
},
"execution_count": 406,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"bmi\"] = df[\"weight\"] / (df[\"height\"] / 100) ** 2\n",
"df.drop([\"weight\", \"height\"], axis=1, inplace=True)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 407,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 407,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"\n",
"sns.heatmap(df.corr())"
]
},
{
"cell_type": "code",
"execution_count": 411,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization terminated successfully.\n",
" Current function value: 0.567793\n",
" Iterations 6\n"
]
},
{
"data": {
"text/html": [
"<table class=\"simpletable\">\n",
"<tr>\n",
" <td>Model:</td> <td>Logit</td> <td>Method:</td> <td>MLE</td> \n",
"</tr>\n",
"<tr>\n",
" <td>Dependent Variable:</td> <td>cardio</td> <td>Pseudo R-squared:</td> <td>0.181</td> \n",
"</tr>\n",
"<tr>\n",
" <td>Date:</td> <td>2025-02-21 23:59</td> <td>AIC:</td> <td>66609.4135</td>\n",
"</tr>\n",
"<tr>\n",
" <td>No. Observations:</td> <td>58637</td> <td>BIC:</td> <td>66708.1838</td>\n",
"</tr>\n",
"<tr>\n",
" <td>Df Model:</td> <td>10</td> <td>Log-Likelihood:</td> <td>-33294.</td> \n",
"</tr>\n",
"<tr>\n",
" <td>Df Residuals:</td> <td>58626</td> <td>LL-Null:</td> <td>-40641.</td> \n",
"</tr>\n",
"<tr>\n",
" <td>Converged:</td> <td>1.0000</td> <td>LLR p-value:</td> <td>0.0000</td> \n",
"</tr>\n",
"<tr>\n",
" <td>No. Iterations:</td> <td>6.0000</td> <td>Scale:</td> <td>1.0000</td> \n",
"</tr>\n",
"</table>\n",
"<table class=\"simpletable\">\n",
"<tr>\n",
" <td></td> <th>Coef.</th> <th>Std.Err.</th> <th>z</th> <th>P>|z|</th> <th>[0.025</th> <th>0.975]</th> \n",
"</tr>\n",
"<tr>\n",
" <th>const</th> <td>-11.5426</td> <td>0.1324</td> <td>-87.1794</td> <td>0.0000</td> <td>-11.8021</td> <td>-11.2831</td>\n",
"</tr>\n",
"<tr>\n",
" <th>age</th> <td>0.0523</td> <td>0.0014</td> <td>36.0898</td> <td>0.0000</td> <td>0.0494</td> <td>0.0551</td> \n",
"</tr>\n",
"<tr>\n",
" <th>gender</th> <td>0.0206</td> <td>0.0211</td> <td>0.9792</td> <td>0.3275</td> <td>-0.0207</td> <td>0.0619</td> \n",
"</tr>\n",
"<tr>\n",
" <th>ap_hi</th> <td>0.0469</td> <td>0.0009</td> <td>52.1945</td> <td>0.0000</td> <td>0.0451</td> <td>0.0486</td> \n",
"</tr>\n",
"<tr>\n",
" <th>ap_lo</th> <td>0.0232</td> <td>0.0014</td> <td>16.3321</td> <td>0.0000</td> <td>0.0204</td> <td>0.0259</td> \n",
"</tr>\n",
"<tr>\n",
" <th>cholesterol</th> <td>0.4859</td> <td>0.0168</td> <td>29.0062</td> <td>0.0000</td> <td>0.4531</td> <td>0.5187</td> \n",
"</tr>\n",
"<tr>\n",
" <th>gluc</th> <td>-0.1116</td> <td>0.0190</td> <td>-5.8803</td> <td>0.0000</td> <td>-0.1488</td> <td>-0.0744</td>\n",
"</tr>\n",
"<tr>\n",
" <th>smoke</th> <td>-0.1279</td> <td>0.0373</td> <td>-3.4313</td> <td>0.0006</td> <td>-0.2009</td> <td>-0.0548</td>\n",
"</tr>\n",
"<tr>\n",
" <th>alco</th> <td>-0.1782</td> <td>0.0452</td> <td>-3.9429</td> <td>0.0001</td> <td>-0.2668</td> <td>-0.0896</td>\n",
"</tr>\n",
"<tr>\n",
" <th>active</th> <td>-0.2377</td> <td>0.0235</td> <td>-10.1027</td> <td>0.0000</td> <td>-0.2838</td> <td>-0.1916</td>\n",
"</tr>\n",
"<tr>\n",
" <th>bmi</th> <td>0.0226</td> <td>0.0018</td> <td>12.4231</td> <td>0.0000</td> <td>0.0190</td> <td>0.0261</td> \n",
"</tr>\n",
"</table><br/>\n"
],
"text/latex": [
"\\begin{table}\n",
"\\caption{Results: Logit}\n",
"\\label{}\n",
"\\begin{center}\n",
"\\begin{tabular}{llll}\n",
"\\hline\n",
"Model: & Logit & Method: & MLE \\\\\n",
"Dependent Variable: & cardio & Pseudo R-squared: & 0.181 \\\\\n",
"Date: & 2025-02-21 23:59 & AIC: & 66609.4135 \\\\\n",
"No. Observations: & 58637 & BIC: & 66708.1838 \\\\\n",
"Df Model: & 10 & Log-Likelihood: & -33294. \\\\\n",
"Df Residuals: & 58626 & LL-Null: & -40641. \\\\\n",
"Converged: & 1.0000 & LLR p-value: & 0.0000 \\\\\n",
"No. Iterations: & 6.0000 & Scale: & 1.0000 \\\\\n",
"\\hline\n",
"\\end{tabular}\n",
"\\end{center}\n",
"\n",
"\\begin{center}\n",
"\\begin{tabular}{lrrrrrr}\n",
"\\hline\n",
" & Coef. & Std.Err. & z & P$> |$z$|$ & [0.025 & 0.975] \\\\\n",
"\\hline\n",
"const & -11.5426 & 0.1324 & -87.1794 & 0.0000 & -11.8021 & -11.2831 \\\\\n",
"age & 0.0523 & 0.0014 & 36.0898 & 0.0000 & 0.0494 & 0.0551 \\\\\n",
"gender & 0.0206 & 0.0211 & 0.9792 & 0.3275 & -0.0207 & 0.0619 \\\\\n",
"ap\\_hi & 0.0469 & 0.0009 & 52.1945 & 0.0000 & 0.0451 & 0.0486 \\\\\n",
"ap\\_lo & 0.0232 & 0.0014 & 16.3321 & 0.0000 & 0.0204 & 0.0259 \\\\\n",
"cholesterol & 0.4859 & 0.0168 & 29.0062 & 0.0000 & 0.4531 & 0.5187 \\\\\n",
"gluc & -0.1116 & 0.0190 & -5.8803 & 0.0000 & -0.1488 & -0.0744 \\\\\n",
"smoke & -0.1279 & 0.0373 & -3.4313 & 0.0006 & -0.2009 & -0.0548 \\\\\n",
"alco & -0.1782 & 0.0452 & -3.9429 & 0.0001 & -0.2668 & -0.0896 \\\\\n",
"active & -0.2377 & 0.0235 & -10.1027 & 0.0000 & -0.2838 & -0.1916 \\\\\n",
"bmi & 0.0226 & 0.0018 & 12.4231 & 0.0000 & 0.0190 & 0.0261 \\\\\n",
"\\hline\n",
"\\end{tabular}\n",
"\\end{center}\n",
"\\end{table}\n",
"\\bigskip\n"
],
"text/plain": [
"<class 'statsmodels.iolib.summary2.Summary'>\n",
"\"\"\"\n",
" Results: Logit\n",
"=================================================================\n",
"Model: Logit Method: MLE \n",
"Dependent Variable: cardio Pseudo R-squared: 0.181 \n",
"Date: 2025-02-21 23:59 AIC: 66609.4135\n",
"No. Observations: 58637 BIC: 66708.1838\n",
"Df Model: 10 Log-Likelihood: -33294. \n",
"Df Residuals: 58626 LL-Null: -40641. \n",
"Converged: 1.0000 LLR p-value: 0.0000 \n",
"No. Iterations: 6.0000 Scale: 1.0000 \n",
"-----------------------------------------------------------------\n",
" Coef. Std.Err. z P>|z| [0.025 0.975] \n",
"-----------------------------------------------------------------\n",
"const -11.5426 0.1324 -87.1794 0.0000 -11.8021 -11.2831\n",
"age 0.0523 0.0014 36.0898 0.0000 0.0494 0.0551\n",
"gender 0.0206 0.0211 0.9792 0.3275 -0.0207 0.0619\n",
"ap_hi 0.0469 0.0009 52.1945 0.0000 0.0451 0.0486\n",
"ap_lo 0.0232 0.0014 16.3321 0.0000 0.0204 0.0259\n",
"cholesterol 0.4859 0.0168 29.0062 0.0000 0.4531 0.5187\n",
"gluc -0.1116 0.0190 -5.8803 0.0000 -0.1488 -0.0744\n",
"smoke -0.1279 0.0373 -3.4313 0.0006 -0.2009 -0.0548\n",
"alco -0.1782 0.0452 -3.9429 0.0001 -0.2668 -0.0896\n",
"active -0.2377 0.0235 -10.1027 0.0000 -0.2838 -0.1916\n",
"bmi 0.0226 0.0018 12.4231 0.0000 0.0190 0.0261\n",
"=================================================================\n",
"\n",
"\"\"\""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"cholesterol 1.625611\n",
"age 1.053639\n",
"ap_hi 1.047999\n",
"ap_lo 1.023425\n",
"bmi 1.022841\n",
"gender 1.020836\n",
"gluc 0.894398\n",
"smoke 0.879970\n",
"alco 0.836750\n",
"active 0.788470\n",
"const 0.000010\n",
"dtype: float64"
]
},
"execution_count": 411,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"import statsmodels.api as sm\n",
"import numpy as np\n",
"\n",
"random_state = 9\n",
"\n",
"stat_y = df[\"cardio\"]\n",
"stat_X = df.drop([\"cardio\"], axis=1).copy()\n",
"stat_X_train, stat_X_test, stat_y_train, stat_y_test = train_test_split(\n",
" stat_X, stat_y, test_size=0.15, random_state=9\n",
")\n",
"\n",
"log_model = sm.Logit(stat_y_train, sm.add_constant(stat_X_train))\n",
"log_result = log_model.fit()\n",
"display(log_result.summary2())\n",
"np.exp(log_result.params).sort_values(ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 421,
"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>age</th>\n",
" <th>ap_hi</th>\n",
" <th>cholesterol</th>\n",
" <th>cardio</th>\n",
" <th>bmi</th>\n",
" </tr>\n",
" <tr>\n",
" <th>id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>50.358668</td>\n",
" <td>110</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>21.967120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>55.382762</td>\n",
" <td>140</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>34.927679</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>51.629066</td>\n",
" <td>130</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>23.507805</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>48.250465</td>\n",
" <td>150</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>28.710479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>47.842515</td>\n",
" <td>100</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>23.011177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99993</th>\n",
" <td>52.677691</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>26.927438</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99995</th>\n",
" <td>61.879860</td>\n",
" <td>140</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>50.472681</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99996</th>\n",
" <td>52.201292</td>\n",
" <td>180</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>31.353579</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99998</th>\n",
" <td>61.414412</td>\n",
" <td>135</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>27.099251</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99999</th>\n",
" <td>56.236995</td>\n",
" <td>120</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>24.913495</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>68985 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" age ap_hi cholesterol cardio bmi\n",
"id \n",
"0 50.358668 110 1 0 21.967120\n",
"1 55.382762 140 3 1 34.927679\n",
"2 51.629066 130 3 1 23.507805\n",
"3 48.250465 150 1 1 28.710479\n",
"4 47.842515 100 1 0 23.011177\n",
"... ... ... ... ... ...\n",
"99993 52.677691 120 1 0 26.927438\n",
"99995 61.879860 140 2 1 50.472681\n",
"99996 52.201292 180 3 1 31.353579\n",
"99998 61.414412 135 1 1 27.099251\n",
"99999 56.236995 120 2 0 24.913495\n",
"\n",
"[68985 rows x 5 columns]"
]
},
"execution_count": 421,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# data = df.drop([\"gluc\", \"smoke\", \"alco\", \"active\", \"ap_lo\"], axis=1)\n",
"data = df.drop(\n",
" [\n",
" \"gluc\",\n",
" \"smoke\",\n",
" \"alco\",\n",
" \"ap_lo\",\n",
" \"gender\",\n",
" # \"cholesterol\",\n",
" \"active\",\n",
" ],\n",
" axis=1,\n",
")\n",
"# data = df.copy()\n",
"data"
]
},
{
"cell_type": "code",
"execution_count": 431,
"metadata": {},
"outputs": [],
"source": [
"data.to_csv(\"data-cardio/cardio_clear.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 422,
"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>age</th>\n",
" <th>ap_hi</th>\n",
" <th>cholesterol</th>\n",
" <th>bmi</th>\n",
" </tr>\n",
" <tr>\n",
" <th>id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>94960</th>\n",
" <td>62.014018</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>26.892323</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30807</th>\n",
" <td>57.745592</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>28.393726</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26485</th>\n",
" <td>59.670354</td>\n",
" <td>120</td>\n",
" <td>3</td>\n",
" <td>23.875115</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3868</th>\n",
" <td>49.715256</td>\n",
" <td>110</td>\n",
" <td>1</td>\n",
" <td>20.820940</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45890</th>\n",
" <td>59.785347</td>\n",
" <td>160</td>\n",
" <td>1</td>\n",
" <td>23.529412</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>61975</th>\n",
" <td>62.558865</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>28.196921</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32741</th>\n",
" <td>57.882488</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>29.043709</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94833</th>\n",
" <td>51.371701</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>29.242109</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95660</th>\n",
" <td>45.767167</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>24.977043</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81002</th>\n",
" <td>55.544300</td>\n",
" <td>150</td>\n",
" <td>1</td>\n",
" <td>27.053803</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>55188 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" age ap_hi cholesterol bmi\n",
"id \n",
"94960 62.014018 120 1 26.892323\n",
"30807 57.745592 120 1 28.393726\n",
"26485 59.670354 120 3 23.875115\n",
"3868 49.715256 110 1 20.820940\n",
"45890 59.785347 160 1 23.529412\n",
"... ... ... ... ...\n",
"61975 62.558865 120 1 28.196921\n",
"32741 57.882488 120 1 29.043709\n",
"94833 51.371701 120 1 29.242109\n",
"95660 45.767167 120 1 24.977043\n",
"81002 55.544300 150 1 27.053803\n",
"\n",
"[55188 rows x 4 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"id\n",
"94960 0\n",
"30807 0\n",
"26485 0\n",
"3868 1\n",
"45890 1\n",
" ..\n",
"61975 1\n",
"32741 0\n",
"94833 0\n",
"95660 0\n",
"81002 1\n",
"Name: cardio, Length: 55188, dtype: int64"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>age</th>\n",
" <th>ap_hi</th>\n",
" <th>cholesterol</th>\n",
" <th>bmi</th>\n",
" </tr>\n",
" <tr>\n",
" <th>id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>42270</th>\n",
" <td>60.078305</td>\n",
" <td>140</td>\n",
" <td>1</td>\n",
" <td>45.918367</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10780</th>\n",
" <td>55.360859</td>\n",
" <td>120</td>\n",
" <td>2</td>\n",
" <td>24.998904</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42436</th>\n",
" <td>48.198445</td>\n",
" <td>100</td>\n",
" <td>3</td>\n",
" <td>21.926126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88647</th>\n",
" <td>41.517906</td>\n",
" <td>130</td>\n",
" <td>2</td>\n",
" <td>27.764650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62336</th>\n",
" <td>51.692038</td>\n",
" <td>110</td>\n",
" <td>1</td>\n",
" <td>22.230987</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>30330</th>\n",
" <td>47.697404</td>\n",
" <td>100</td>\n",
" <td>1</td>\n",
" <td>22.724403</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62907</th>\n",
" <td>58.597087</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>23.828125</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98612</th>\n",
" <td>51.404556</td>\n",
" <td>110</td>\n",
" <td>1</td>\n",
" <td>22.589551</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5767</th>\n",
" <td>62.033184</td>\n",
" <td>120</td>\n",
" <td>1</td>\n",
" <td>23.875115</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14769</th>\n",
" <td>41.506954</td>\n",
" <td>120</td>\n",
" <td>2</td>\n",
" <td>22.948116</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>13797 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" age ap_hi cholesterol bmi\n",
"id \n",
"42270 60.078305 140 1 45.918367\n",
"10780 55.360859 120 2 24.998904\n",
"42436 48.198445 100 3 21.926126\n",
"88647 41.517906 130 2 27.764650\n",
"62336 51.692038 110 1 22.230987\n",
"... ... ... ... ...\n",
"30330 47.697404 100 1 22.724403\n",
"62907 58.597087 120 1 23.828125\n",
"98612 51.404556 110 1 22.589551\n",
"5767 62.033184 120 1 23.875115\n",
"14769 41.506954 120 2 22.948116\n",
"\n",
"[13797 rows x 4 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"id\n",
"42270 1\n",
"10780 0\n",
"42436 1\n",
"88647 1\n",
"62336 0\n",
" ..\n",
"30330 1\n",
"62907 0\n",
"98612 0\n",
"5767 0\n",
"14769 1\n",
"Name: cardio, Length: 13797, dtype: int64"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y = data[\"cardio\"]\n",
"X = data.drop([\"cardio\"], axis=1).copy()\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y, test_size=0.2, random_state=random_state\n",
")\n",
"display(X_train, y_train, X_test, y_test)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/user/Projects/python/fuzzy-rules-generator/.venv/lib/python3.12/site-packages/sklearn/base.py:486: UserWarning: X has feature names, but DecisionTreeClassifier was fitted without feature names\n",
" warnings.warn(\n",
"/Users/user/Projects/python/fuzzy-rules-generator/.venv/lib/python3.12/site-packages/sklearn/base.py:486: UserWarning: X has feature names, but DecisionTreeClassifier was fitted without feature names\n",
" warnings.warn(\n",
"/Users/user/Projects/python/fuzzy-rules-generator/.venv/lib/python3.12/site-packages/sklearn/base.py:486: UserWarning: X has feature names, but DecisionTreeClassifier was fitted without feature names\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/plain": [
"'Precision_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"np.float64(0.7368262116865468)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'Recall_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"np.float64(0.7180694526191878)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'Accuracy_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"0.7347974197289265"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'ROC_AUC_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"np.float64(0.7917285464726767)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'F1_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"np.float64(0.7273269245100231)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'MCC_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"np.float64(0.46942772902650703)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'Cohen_kappa_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"np.float64(0.4692799184358021)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'Confusion_matrix'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[5258, 1743],\n",
" [1916, 4880]])"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from src.utils import run_classification\n",
"from sklearn import tree\n",
"from sklearn import metrics\n",
"import numpy as np\n",
"\n",
"\n",
"model = tree.DecisionTreeClassifier(\n",
" random_state=random_state,\n",
" max_depth=6,\n",
").fit(X_train.values, y_train.values.ravel())\n",
"\n",
"\n",
"y_train_predict = model.predict(X_train)\n",
"y_test_probs = model.predict_proba(X_test)\n",
"y_test_predict = model.predict(X_test)\n",
"\n",
"\n",
"display(\"Precision_test\", metrics.precision_score(y_test, y_test_predict))\n",
"display(\"Recall_test\", metrics.recall_score(y_test, y_test_predict))\n",
"display(\"Accuracy_test\", metrics.accuracy_score(y_test, y_test_predict))\n",
"display(\"ROC_AUC_test\", metrics.roc_auc_score(y_test, y_test_probs[:, 1])) # type: ignore\n",
"display(\"F1_test\", metrics.f1_score(y_test, y_test_predict))\n",
"display(\"MCC_test\", metrics.matthews_corrcoef(y_test, y_test_predict))\n",
"display(\"Cohen_kappa_test\", metrics.cohen_kappa_score(y_test, y_test_predict))\n",
"display(\"Confusion_matrix\", metrics.confusion_matrix(y_test, y_test_predict))"
]
},
{
"cell_type": "code",
"execution_count": 429,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"|--- ap_hi <= 129.50\n",
"| |--- age <= 54.65\n",
"| | |--- cholesterol <= 2.50\n",
"| | | |--- age <= 43.79\n",
"| | | | |--- cholesterol <= 1.50\n",
"| | | | | |--- ap_hi <= 114.50\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- ap_hi > 114.50\n",
"| | | | | | |--- class: 0\n",
"| | | | |--- cholesterol > 1.50\n",
"| | | | | |--- bmi <= 28.87\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 28.87\n",
"| | | | | | |--- class: 0\n",
"| | | |--- age > 43.79\n",
"| | | | |--- ap_hi <= 119.50\n",
"| | | | | |--- bmi <= 22.05\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 22.05\n",
"| | | | | | |--- class: 0\n",
"| | | | |--- ap_hi > 119.50\n",
"| | | | | |--- bmi <= 27.71\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 27.71\n",
"| | | | | | |--- class: 0\n",
"| | |--- cholesterol > 2.50\n",
"| | | |--- bmi <= 29.04\n",
"| | | | |--- age <= 41.60\n",
"| | | | | |--- ap_hi <= 115.00\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- ap_hi > 115.00\n",
"| | | | | | |--- class: 0\n",
"| | | | |--- age > 41.60\n",
"| | | | | |--- age <= 54.17\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- age > 54.17\n",
"| | | | | | |--- class: 0\n",
"| | | |--- bmi > 29.04\n",
"| | | | |--- age <= 54.01\n",
"| | | | | |--- age <= 39.75\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- age > 39.75\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- age > 54.01\n",
"| | | | | |--- bmi <= 35.02\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 35.02\n",
"| | | | | | |--- class: 1\n",
"| |--- age > 54.65\n",
"| | |--- cholesterol <= 2.50\n",
"| | | |--- age <= 60.71\n",
"| | | | |--- ap_hi <= 118.50\n",
"| | | | | |--- bmi <= 23.33\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 23.33\n",
"| | | | | | |--- class: 0\n",
"| | | | |--- ap_hi > 118.50\n",
"| | | | | |--- bmi <= 32.89\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 32.89\n",
"| | | | | | |--- class: 1\n",
"| | | |--- age > 60.71\n",
"| | | | |--- bmi <= 20.51\n",
"| | | | | |--- age <= 64.31\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- age > 64.31\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- bmi > 20.51\n",
"| | | | | |--- ap_hi <= 115.50\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- ap_hi > 115.50\n",
"| | | | | | |--- class: 1\n",
"| | |--- cholesterol > 2.50\n",
"| | | |--- bmi <= 26.03\n",
"| | | | |--- age <= 60.89\n",
"| | | | | |--- age <= 60.48\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- age > 60.48\n",
"| | | | | | |--- class: 0\n",
"| | | | |--- age > 60.89\n",
"| | | | | |--- bmi <= 25.91\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 25.91\n",
"| | | | | | |--- class: 0\n",
"| | | |--- bmi > 26.03\n",
"| | | | |--- age <= 59.39\n",
"| | | | | |--- bmi <= 35.93\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 35.93\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- age > 59.39\n",
"| | | | | |--- bmi <= 35.12\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 35.12\n",
"| | | | | | |--- class: 1\n",
"|--- ap_hi > 129.50\n",
"| |--- ap_hi <= 138.50\n",
"| | |--- cholesterol <= 2.50\n",
"| | | |--- age <= 59.54\n",
"| | | | |--- bmi <= 21.64\n",
"| | | | | |--- bmi <= 17.30\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 17.30\n",
"| | | | | | |--- class: 0\n",
"| | | | |--- bmi > 21.64\n",
"| | | | | |--- age <= 39.99\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- age > 39.99\n",
"| | | | | | |--- class: 1\n",
"| | | |--- age > 59.54\n",
"| | | | |--- age <= 62.46\n",
"| | | | | |--- bmi <= 20.61\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 20.61\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- age > 62.46\n",
"| | | | | |--- age <= 64.00\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- age > 64.00\n",
"| | | | | | |--- class: 1\n",
"| | |--- cholesterol > 2.50\n",
"| | | |--- bmi <= 30.74\n",
"| | | | |--- bmi <= 30.06\n",
"| | | | | |--- bmi <= 23.93\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 23.93\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- bmi > 30.06\n",
"| | | | | |--- bmi <= 30.69\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 30.69\n",
"| | | | | | |--- class: 0\n",
"| | | |--- bmi > 30.74\n",
"| | | | |--- bmi <= 32.05\n",
"| | | | | |--- age <= 43.63\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- age > 43.63\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- bmi > 32.05\n",
"| | | | | |--- bmi <= 32.34\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 32.34\n",
"| | | | | | |--- class: 1\n",
"| |--- ap_hi > 138.50\n",
"| | |--- ap_hi <= 149.50\n",
"| | | |--- age <= 39.56\n",
"| | | | |--- bmi <= 38.19\n",
"| | | | | |--- age <= 39.54\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- age > 39.54\n",
"| | | | | | |--- class: 0\n",
"| | | | |--- bmi > 38.19\n",
"| | | | | |--- bmi <= 50.55\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 50.55\n",
"| | | | | | |--- class: 1\n",
"| | | |--- age > 39.56\n",
"| | | | |--- age <= 47.57\n",
"| | | | | |--- bmi <= 19.23\n",
"| | | | | | |--- class: 0\n",
"| | | | | |--- bmi > 19.23\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- age > 47.57\n",
"| | | | | |--- age <= 61.57\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- age > 61.57\n",
"| | | | | | |--- class: 1\n",
"| | |--- ap_hi > 149.50\n",
"| | | |--- bmi <= 20.48\n",
"| | | | |--- age <= 64.27\n",
"| | | | | |--- age <= 55.82\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- age > 55.82\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- age > 64.27\n",
"| | | | | |--- class: 0\n",
"| | | |--- bmi > 20.48\n",
"| | | | |--- age <= 64.35\n",
"| | | | | |--- age <= 49.82\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- age > 49.82\n",
"| | | | | | |--- class: 1\n",
"| | | | |--- age > 64.35\n",
"| | | | | |--- bmi <= 36.80\n",
"| | | | | | |--- class: 1\n",
"| | | | | |--- bmi > 36.80\n",
"| | | | | | |--- class: 0\n",
"\n"
]
}
],
"source": [
"rules = tree.export_text(model, feature_names=X_train.columns.values.tolist())\n",
"print(rules)"
]
},
{
"cell_type": "code",
"execution_count": 430,
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"\n",
"pickle.dump(model, open(\"data-cardio/cardio.model.sav\", \"wb\"))"
]
}
],
"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.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}