{
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import joblib \n",
"from IPython.display import Image"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Student Performance Dataset \n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" school \n",
" sex \n",
" age \n",
" address \n",
" famsize \n",
" Pstatus \n",
" Medu \n",
" Fedu \n",
" Mjob \n",
" Fjob \n",
" ... \n",
" famrel \n",
" freetime \n",
" goout \n",
" Dalc \n",
" Walc \n",
" health \n",
" absences \n",
" G1 \n",
" G2 \n",
" G3 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" GP \n",
" F \n",
" 18 \n",
" U \n",
" GT3 \n",
" A \n",
" 4 \n",
" 4 \n",
" at_home \n",
" teacher \n",
" ... \n",
" 4 \n",
" 3 \n",
" 4 \n",
" 1 \n",
" 1 \n",
" 3 \n",
" 4 \n",
" 0 \n",
" 11 \n",
" 11 \n",
" \n",
" \n",
" 1 \n",
" GP \n",
" F \n",
" 17 \n",
" U \n",
" GT3 \n",
" T \n",
" 1 \n",
" 1 \n",
" at_home \n",
" other \n",
" ... \n",
" 5 \n",
" 3 \n",
" 3 \n",
" 1 \n",
" 1 \n",
" 3 \n",
" 2 \n",
" 9 \n",
" 11 \n",
" 11 \n",
" \n",
" \n",
" 2 \n",
" GP \n",
" F \n",
" 15 \n",
" U \n",
" LE3 \n",
" T \n",
" 1 \n",
" 1 \n",
" at_home \n",
" other \n",
" ... \n",
" 4 \n",
" 3 \n",
" 2 \n",
" 2 \n",
" 3 \n",
" 3 \n",
" 6 \n",
" 12 \n",
" 13 \n",
" 12 \n",
" \n",
" \n",
" 3 \n",
" GP \n",
" F \n",
" 15 \n",
" U \n",
" GT3 \n",
" T \n",
" 4 \n",
" 2 \n",
" health \n",
" services \n",
" ... \n",
" 3 \n",
" 2 \n",
" 2 \n",
" 1 \n",
" 1 \n",
" 5 \n",
" 0 \n",
" 14 \n",
" 14 \n",
" 14 \n",
" \n",
" \n",
" 4 \n",
" GP \n",
" F \n",
" 16 \n",
" U \n",
" GT3 \n",
" T \n",
" 3 \n",
" 3 \n",
" other \n",
" other \n",
" ... \n",
" 4 \n",
" 3 \n",
" 2 \n",
" 1 \n",
" 2 \n",
" 5 \n",
" 0 \n",
" 11 \n",
" 13 \n",
" 13 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 644 \n",
" MS \n",
" F \n",
" 19 \n",
" R \n",
" GT3 \n",
" T \n",
" 2 \n",
" 3 \n",
" services \n",
" other \n",
" ... \n",
" 5 \n",
" 4 \n",
" 2 \n",
" 1 \n",
" 2 \n",
" 5 \n",
" 4 \n",
" 10 \n",
" 11 \n",
" 10 \n",
" \n",
" \n",
" 645 \n",
" MS \n",
" F \n",
" 18 \n",
" U \n",
" LE3 \n",
" T \n",
" 3 \n",
" 1 \n",
" teacher \n",
" services \n",
" ... \n",
" 4 \n",
" 3 \n",
" 4 \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 4 \n",
" 15 \n",
" 15 \n",
" 16 \n",
" \n",
" \n",
" 646 \n",
" MS \n",
" F \n",
" 18 \n",
" U \n",
" GT3 \n",
" T \n",
" 1 \n",
" 1 \n",
" other \n",
" other \n",
" ... \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 5 \n",
" 6 \n",
" 11 \n",
" 12 \n",
" 9 \n",
" \n",
" \n",
" 647 \n",
" MS \n",
" M \n",
" 17 \n",
" U \n",
" LE3 \n",
" T \n",
" 3 \n",
" 1 \n",
" services \n",
" services \n",
" ... \n",
" 2 \n",
" 4 \n",
" 5 \n",
" 3 \n",
" 4 \n",
" 2 \n",
" 6 \n",
" 10 \n",
" 10 \n",
" 10 \n",
" \n",
" \n",
" 648 \n",
" MS \n",
" M \n",
" 18 \n",
" R \n",
" LE3 \n",
" T \n",
" 3 \n",
" 2 \n",
" services \n",
" other \n",
" ... \n",
" 4 \n",
" 4 \n",
" 1 \n",
" 3 \n",
" 4 \n",
" 5 \n",
" 4 \n",
" 10 \n",
" 11 \n",
" 11 \n",
" \n",
" \n",
"
\n",
"
649 rows × 33 columns
\n",
"
"
],
"text/plain": [
" school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n",
"0 GP F 18 U GT3 A 4 4 at_home teacher \n",
"1 GP F 17 U GT3 T 1 1 at_home other \n",
"2 GP F 15 U LE3 T 1 1 at_home other \n",
"3 GP F 15 U GT3 T 4 2 health services \n",
"4 GP F 16 U GT3 T 3 3 other other \n",
".. ... .. ... ... ... ... ... ... ... ... \n",
"644 MS F 19 R GT3 T 2 3 services other \n",
"645 MS F 18 U LE3 T 3 1 teacher services \n",
"646 MS F 18 U GT3 T 1 1 other other \n",
"647 MS M 17 U LE3 T 3 1 services services \n",
"648 MS M 18 R LE3 T 3 2 services other \n",
"\n",
" ... famrel freetime goout Dalc Walc health absences G1 G2 G3 \n",
"0 ... 4 3 4 1 1 3 4 0 11 11 \n",
"1 ... 5 3 3 1 1 3 2 9 11 11 \n",
"2 ... 4 3 2 2 3 3 6 12 13 12 \n",
"3 ... 3 2 2 1 1 5 0 14 14 14 \n",
"4 ... 4 3 2 1 2 5 0 11 13 13 \n",
".. ... ... ... ... ... ... ... ... .. .. .. \n",
"644 ... 5 4 2 1 2 5 4 10 11 10 \n",
"645 ... 4 3 4 1 1 1 4 15 15 16 \n",
"646 ... 1 1 1 1 1 5 6 11 12 9 \n",
"647 ... 2 4 5 3 4 2 6 10 10 10 \n",
"648 ... 4 4 1 3 4 5 4 10 11 11 \n",
"\n",
"[649 rows x 33 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('student-por.csv')\n",
"df"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# **Proven hypothesis**\n",
"## *The academic performance of a student depends not only on their academic capabilities but also their socio-economic status.*\n",
"\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
},
"tags": []
},
"source": [
"## **Imagine this...**\n",
"\n",
"## *You are a headmaster/headmistress, managing a school of thousands of students. How do you create the ideal environment for students to academically excel in their education?*\n",
"\n",
"\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# **ET VOILA!**"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"# **The Student Forecaster Model**: \n",
"# https://student-forecaster.streamlit.app/"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# *Step 1:* Exploratory analysis \n",
"- Distribution and spread of the data \n",
"- Dropping columns which at first look are not relevant\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/m4/kwmg1zjs75j99y7p7rtp4wcc0000gn/T/ipykernel_93639/626108447.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" df_dropped['G3_binary'] = pd.cut(x = df_dropped['G3'], bins=[df_dropped['G3'].min()-1, df_dropped['G3'].mean(), df_dropped['G3'].max()+1], labels=['fail', 'pass'])\n"
]
}
],
"source": [
"df_dropped = df[['sex', 'age', 'Medu', 'reason', 'traveltime', 'studytime', 'freetime', 'higher',\n",
" 'failures', 'internet', 'G3']]\n",
"df_dropped['G3_binary'] = pd.cut(x = df_dropped['G3'], bins=[df_dropped['G3'].min()-1, df_dropped['G3'].mean(), df_dropped['G3'].max()+1], labels=['fail', 'pass'])"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"d1 = [\n",
" ['home address', 'not relevant to data'],\n",
" ['parents jobs', 'over 50percent of data classified as other'],\n",
" ['attended nursery', 'studies show attendance no longer relevant'],\n",
" ['1st and 2nd term grades', 'G3, the final grade is the only target variable']\n",
"]\n",
"d1_dropped = pd.DataFrame(data = d1, columns=['Columns grouping of data', 'Reason'])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "skip"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Columns grouping of data \n",
" Reason \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" home address \n",
" not relevant to data \n",
" \n",
" \n",
" 1 \n",
" parents jobs \n",
" over 50percent of data classified as other \n",
" \n",
" \n",
" 2 \n",
" attended nursery \n",
" studies show attendance no longer relevant \n",
" \n",
" \n",
" 3 \n",
" 1st and 2nd term grades \n",
" G3, the final grade is the only target variable \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Columns grouping of data Reason\n",
"0 home address not relevant to data\n",
"1 parents jobs over 50percent of data classified as other\n",
"2 attended nursery studies show attendance no longer relevant\n",
"3 1st and 2nd term grades G3, the final grade is the only target variable"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#First glance dropped columns\n",
"d1_dropped"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# *Step 2:* Creating subgroups of data\n",
"- To map out relationships between columns of data"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"d3 = [\n",
" ['age, Dalc,Walc, health', 'alcohol intake during weekday and weekend'], \n",
" ['famsize, Pstatus, guardian, famrel', 'quality of family relationships'],\n",
" ['studytime,activities, freetime, goout, absences, romantic', 'time related to studying'],\n",
" ['schoolsup, famsup, paid,higher,failures', 'extra educational support'],\n",
" ['school, age, Medu,reason, traveltime, failures,internet', 'Impact of reason to pick school'],\n",
" ['Medu, Fedu', 'parents level of education']\n",
"\n",
" ]\n",
"\n",
"df3 = pd.DataFrame(data = d3, columns=['original columns', 'Sub-group'])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" original columns \n",
" Sub-group \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" age, Dalc,Walc, health \n",
" alcohol intake during weekday and weekend \n",
" \n",
" \n",
" 1 \n",
" famsize, Pstatus, guardian, famrel \n",
" quality of family relationships \n",
" \n",
" \n",
" 2 \n",
" studytime,activities, freetime, goout, absence... \n",
" time related to studying \n",
" \n",
" \n",
" 3 \n",
" schoolsup, famsup, paid,higher,failures \n",
" extra educational support \n",
" \n",
" \n",
" 4 \n",
" school, age, Medu,reason, traveltime, failures... \n",
" Impact of reason to pick school \n",
" \n",
" \n",
" 5 \n",
" Medu, Fedu \n",
" parents level of education \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" original columns \\\n",
"0 age, Dalc,Walc, health \n",
"1 famsize, Pstatus, guardian, famrel \n",
"2 studytime,activities, freetime, goout, absence... \n",
"3 schoolsup, famsup, paid,higher,failures \n",
"4 school, age, Medu,reason, traveltime, failures... \n",
"5 Medu, Fedu \n",
"\n",
" Sub-group \n",
"0 alcohol intake during weekday and weekend \n",
"1 quality of family relationships \n",
"2 time related to studying \n",
"3 extra educational support \n",
"4 Impact of reason to pick school \n",
"5 parents level of education "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Subgrouping of data columns\n",
"df3"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# *Step 3:* Analysis within sub-groups \n",
"- To decide the dominating variables most explaining the target variable"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"d2 = [\n",
" ['alcohol intake during weekday and weekend', 'heatmap correlation, count by grouping', 'column removed'], \n",
" ['quality of family relationships', 'heatmap correlation, value counts', 'droped all columns as no evident relation to grade'],\n",
" ['time related to studying', 'heatmap correlation', 'dropped all columns except the study time and freetime which impacted G3'],\n",
" ['extra educational support', 'heatmap correlation and value counts', 'if a student has failed then they likely have additional support'],\n",
" ['Impact of reason to pick school', 'percentage value counts and heatmap correlation', 'choice of school has an impact on grades'],\n",
" ['parents level of education', 'value counts by each combination of parents education', 'only keep mother education']\n",
"\n",
" ]\n",
"\n",
"d4 = [\n",
" ['alcohol intake during weekday and weekend', 'column dropped'], \n",
" ['quality of family relationships', 'columns dropped'],\n",
" ['time related to studying', 'dropped all columns except the study time and freetime'],\n",
" ['extra educational support', 'all columns dropped except failure'],\n",
" ['Impact of reason to pick school', 'all columns kept'],\n",
" ['parents level of education', 'fathers education dropped']\n",
" ]\n",
"\n",
"df_analysis2 = pd.DataFrame(data = d4, columns=['Sub-group', 'Action']\n",
" )"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## **Summary of analytical methods used:**\n",
"- Heatmap correlation\n",
"- Value counts\n",
"- Grouping by bins \n",
"- Histograms\n",
"- Boxplot"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"df_family = df[['famsize', 'Pstatus', 'guardian', 'famrel', 'G3']]\n",
"df['famsize2'] = df['famsize'].replace({'GT3': 1, 'LE3': 0})\n",
"df['Pstatus2'] = df['Pstatus'].replace({'T': 1, 'A': 0})\n",
"df['guardian2'] = df['guardian'].replace({'mother': 1, 'father': 0, 'other': 3})\n",
"df_family2 = df[['famsize2', 'Pstatus2', 'guardian2','famrel', 'G3']]\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"## Correlation Heatmap"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 185,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Heatmap of correlation of the subgroup of family relationships with \n",
"#final grade G3\n",
"sns.heatmap(df_family2.corr(), vmin=-1, vmax=1, annot=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"## Creating bins and summarising data "
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Dalc \n",
" Walc \n",
" age \n",
" count \n",
" bins \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" 1 \n",
" 16 \n",
" 68 \n",
" (14, 17] \n",
" \n",
" \n",
" 8 \n",
" 1 \n",
" 2 \n",
" 15 \n",
" 16 \n",
" (14, 17] \n",
" \n",
" \n",
" 48 \n",
" 1 \n",
" 1 \n",
" 20 \n",
" 2 \n",
" (17, 22] \n",
" \n",
" \n",
" 9 \n",
" 1 \n",
" 3 \n",
" 16 \n",
" 16 \n",
" (14, 17] \n",
" \n",
" \n",
" 7 \n",
" 1 \n",
" 3 \n",
" 17 \n",
" 21 \n",
" (14, 17] \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 62 \n",
" 5 \n",
" 1 \n",
" 18 \n",
" 1 \n",
" (17, 22] \n",
" \n",
" \n",
" 61 \n",
" 5 \n",
" 2 \n",
" 21 \n",
" 1 \n",
" (17, 22] \n",
" \n",
" \n",
" 38 \n",
" 5 \n",
" 5 \n",
" 16 \n",
" 3 \n",
" (14, 17] \n",
" \n",
" \n",
" 32 \n",
" 5 \n",
" 5 \n",
" 18 \n",
" 4 \n",
" (17, 22] \n",
" \n",
" \n",
" 81 \n",
" 5 \n",
" 5 \n",
" 22 \n",
" 1 \n",
" (17, 22] \n",
" \n",
" \n",
"
\n",
"
82 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Dalc Walc age count bins\n",
"0 1 1 16 68 (14, 17]\n",
"8 1 2 15 16 (14, 17]\n",
"48 1 1 20 2 (17, 22]\n",
"9 1 3 16 16 (14, 17]\n",
"7 1 3 17 21 (14, 17]\n",
".. ... ... ... ... ...\n",
"62 5 1 18 1 (17, 22]\n",
"61 5 2 21 1 (17, 22]\n",
"38 5 5 16 3 (14, 17]\n",
"32 5 5 18 4 (17, 22]\n",
"81 5 5 22 1 (17, 22]\n",
"\n",
"[82 rows x 5 columns]"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_alcohol = df[['age', 'Dalc','Walc', 'health']]\n",
"df_alcohol_counted = df_alcohol[['Dalc', 'Walc', 'age']].value_counts().reset_index().sort_values('Dalc')\n",
"df_alcohol_counted['bins'] = pd.cut(df_alcohol_counted['age'], bins=[14, 17, 22])\n",
"#df_alcohol_counted = df_alcohol_counted.drop(columns='age')\n"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Dalc \n",
" Walc \n",
" age \n",
" count \n",
" bins \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" 1 \n",
" 16 \n",
" 68 \n",
" (14, 17] \n",
" \n",
" \n",
" 8 \n",
" 1 \n",
" 2 \n",
" 15 \n",
" 16 \n",
" (14, 17] \n",
" \n",
" \n",
" 48 \n",
" 1 \n",
" 1 \n",
" 20 \n",
" 2 \n",
" (17, 22] \n",
" \n",
" \n",
" 9 \n",
" 1 \n",
" 3 \n",
" 16 \n",
" 16 \n",
" (14, 17] \n",
" \n",
" \n",
" 7 \n",
" 1 \n",
" 3 \n",
" 17 \n",
" 21 \n",
" (14, 17] \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 62 \n",
" 5 \n",
" 1 \n",
" 18 \n",
" 1 \n",
" (17, 22] \n",
" \n",
" \n",
" 61 \n",
" 5 \n",
" 2 \n",
" 21 \n",
" 1 \n",
" (17, 22] \n",
" \n",
" \n",
" 38 \n",
" 5 \n",
" 5 \n",
" 16 \n",
" 3 \n",
" (14, 17] \n",
" \n",
" \n",
" 32 \n",
" 5 \n",
" 5 \n",
" 18 \n",
" 4 \n",
" (17, 22] \n",
" \n",
" \n",
" 81 \n",
" 5 \n",
" 5 \n",
" 22 \n",
" 1 \n",
" (17, 22] \n",
" \n",
" \n",
"
\n",
"
82 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Dalc Walc age count bins\n",
"0 1 1 16 68 (14, 17]\n",
"8 1 2 15 16 (14, 17]\n",
"48 1 1 20 2 (17, 22]\n",
"9 1 3 16 16 (14, 17]\n",
"7 1 3 17 21 (14, 17]\n",
".. ... ... ... ... ...\n",
"62 5 1 18 1 (17, 22]\n",
"61 5 2 21 1 (17, 22]\n",
"38 5 5 16 3 (14, 17]\n",
"32 5 5 18 4 (17, 22]\n",
"81 5 5 22 1 (17, 22]\n",
"\n",
"[82 rows x 5 columns]"
]
},
"execution_count": 186,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Value counts of grouping of students by age and level of drinking \n",
"# during the weekday and weekend \n",
"df_alcohol_counted.sort_values(by=['Dalc'])"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"## Sub-group analysis deduction"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Sub-group \n",
" Conclusion \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" alcohol intake during weekday and weekend \n",
" column dropped \n",
" \n",
" \n",
" 1 \n",
" quality of family relationships \n",
" columns dropped \n",
" \n",
" \n",
" 2 \n",
" time related to studying \n",
" dropped all columns except the study time and ... \n",
" \n",
" \n",
" 3 \n",
" extra educational support \n",
" all columns dropped except failure \n",
" \n",
" \n",
" 4 \n",
" Impact of reason to pick school \n",
" all columns kept \n",
" \n",
" \n",
" 5 \n",
" parents level of education \n",
" fathers education dropped \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Sub-group \\\n",
"0 alcohol intake during weekday and weekend \n",
"1 quality of family relationships \n",
"2 time related to studying \n",
"3 extra educational support \n",
"4 Impact of reason to pick school \n",
"5 parents level of education \n",
"\n",
" Conclusion \n",
"0 column dropped \n",
"1 columns dropped \n",
"2 dropped all columns except the study time and ... \n",
"3 all columns dropped except failure \n",
"4 all columns kept \n",
"5 fathers education dropped "
]
},
"execution_count": 183,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Dataframe of subgroup of data, analytical method used and deductions drawn\n",
"df_analysis2"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Conclusion from data analysis\n",
"\n",
"- The biggest impact to G3 is failure\n",
"- If a student has failed then they likely have additional support\n",
"- Nearly 95% of students want to pursue higher education, so data is heavily skewed\n",
"- Over 90% of students do not have paid support but 60% of students have support at home"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" sex \n",
" age \n",
" Medu \n",
" reason \n",
" traveltime \n",
" studytime \n",
" freetime \n",
" higher \n",
" failures \n",
" internet \n",
" G3 \n",
" G3_binary \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" F \n",
" 18 \n",
" 4 \n",
" course \n",
" 2 \n",
" 2 \n",
" 3 \n",
" yes \n",
" 0 \n",
" no \n",
" 11 \n",
" fail \n",
" \n",
" \n",
" 1 \n",
" F \n",
" 17 \n",
" 1 \n",
" course \n",
" 1 \n",
" 2 \n",
" 3 \n",
" yes \n",
" 0 \n",
" yes \n",
" 11 \n",
" fail \n",
" \n",
" \n",
" 2 \n",
" F \n",
" 15 \n",
" 1 \n",
" other \n",
" 1 \n",
" 2 \n",
" 3 \n",
" yes \n",
" 0 \n",
" yes \n",
" 12 \n",
" pass \n",
" \n",
" \n",
" 3 \n",
" F \n",
" 15 \n",
" 4 \n",
" home \n",
" 1 \n",
" 3 \n",
" 2 \n",
" yes \n",
" 0 \n",
" yes \n",
" 14 \n",
" pass \n",
" \n",
" \n",
" 4 \n",
" F \n",
" 16 \n",
" 3 \n",
" home \n",
" 1 \n",
" 2 \n",
" 3 \n",
" yes \n",
" 0 \n",
" no \n",
" 13 \n",
" pass \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" sex age Medu reason traveltime studytime freetime higher failures \\\n",
"0 F 18 4 course 2 2 3 yes 0 \n",
"1 F 17 1 course 1 2 3 yes 0 \n",
"2 F 15 1 other 1 2 3 yes 0 \n",
"3 F 15 4 home 1 3 2 yes 0 \n",
"4 F 16 3 home 1 2 3 yes 0 \n",
"\n",
" internet G3 G3_binary \n",
"0 no 11 fail \n",
"1 yes 11 fail \n",
"2 yes 12 pass \n",
"3 yes 14 pass \n",
"4 no 13 pass "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Final dataframe of chosen variables for training the model\n",
"df_dropped.head()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# *Machine Learning:* \n",
"## Preprocessing, Modelling, Scoring "
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# *Machine Learning Part 1:* \n",
"## Label encoding the target variable G3"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/m4/kwmg1zjs75j99y7p7rtp4wcc0000gn/T/ipykernel_93639/3581341554.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" df_dropped['G3_binary_label'] = label_encoder.fit_transform(df_dropped['G3_binary'])\n"
]
}
],
"source": [
"#Label encoding the target variable\n",
"\n",
"from sklearn.preprocessing import LabelEncoder\n",
"\n",
"label_encoder = LabelEncoder()\n",
"\n",
"df_dropped['G3_binary_label'] = label_encoder.fit_transform(df_dropped['G3_binary'])"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" G3_binary \n",
" G3_binary_label \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" fail \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" fail \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" pass \n",
" 1 \n",
" \n",
" \n",
" 3 \n",
" pass \n",
" 1 \n",
" \n",
" \n",
" 4 \n",
" pass \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" G3_binary G3_binary_label\n",
"0 fail 0\n",
"1 fail 0\n",
"2 pass 1\n",
"3 pass 1\n",
"4 pass 1"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Label encoding the target variable\n",
"df_dropped[['G3_binary',\t'G3_binary_label']].head()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# *Machine Learning Part 2:* \n",
"## Splitting the train and test data "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"#Split the data into train and test\n",
"train_data, test_data = train_test_split(df_dropped, test_size=0.1, random_state=42)\n",
"\n",
"#Ready X and Ys\n",
"X_train = train_data[['sex', 'age', 'Medu', 'reason', 'traveltime', 'studytime', 'freetime', 'higher',\n",
" 'failures', 'internet']]\n",
"y_train = train_data['G3_binary_label']\n",
"\n",
"X_test = test_data[['sex', 'age', 'Medu', 'reason', 'traveltime', 'studytime', 'freetime', 'higher',\n",
" 'failures', 'internet']]\n",
"y_test = test_data['G3_binary_label']"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# *Machine Learning Part 3:* \n",
"## The pipeline: preprocessing and model \n"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"#Boosting\n",
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.ensemble import GradientBoostingClassifier"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"## **Pre-processing pipeline:**\n",
"### to *scale the numerical variables* and *One Hot Encode the categorical variables*"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"# Scale numerical values: \n",
"num_transformer = Pipeline([('standard_scaler', StandardScaler())])\n",
"\n",
"# Encode categorical values\n",
"cat_transformer = OneHotEncoder()\n",
"\n",
"# Parallelize \"num_transformer\" and \"cat_transfomer\"\n",
"preprocessor = ColumnTransformer([\n",
" ('num_transformer', num_transformer, ['age','Medu', 'traveltime', 'studytime', 'freetime', 'failures']),\n",
" ('cat_transformer', cat_transformer, ['sex', 'reason', 'higher', 'internet']),\n",
"])\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Classification model used: Gradient Boosting Classifier"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"\n",
"model = GradientBoostingClassifier()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# *Full pipeline*"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"pipeline4 = Pipeline([\n",
" ('preprocessor', preprocessor),\n",
" ('boosting', model),\n",
"])"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"# *Machine Learning Part 4:* \n",
"## *Training, fitting and comparing scoring metrics across different models*\n"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"d_model = [\n",
" ['Lgistic Regression', '0.75', '0.72 vs 0.72', 'No Overfitting'],\n",
" ['KNN KNeighborsClassifier', '0.76', '0.67 vs 0.83','Overfitting'],\n",
" ['Random Forest Classifier', '0.81', '0.70 vs 0.98', 'Overfitting'],\n",
" ['XGB Classifier','0.82' , '0.68 vs 0.95', 'Overfitting'],\n",
" ['Gradient Boosting Classifier', '0.76', '0.70 vs 0.78', 'Slightly Overfitting']\n",
"]\n",
"df_model = pd.DataFrame(data = d_model, columns=['model used', 'precision', 'Test vs Train precision CV', 'Over/Underfitting'])"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" model used \n",
" precision \n",
" Test vs Train precision CV \n",
" Over/Underfitting \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" Lgistic Regression \n",
" 0.75 \n",
" 0.72 vs 0.72 \n",
" No Overfitting \n",
" \n",
" \n",
" 1 \n",
" KNN KNeighborsClassifier \n",
" 0.76 \n",
" 0.67 vs 0.83 \n",
" Overfitting \n",
" \n",
" \n",
" 2 \n",
" Random Forest Classifier \n",
" 0.81 \n",
" 0.70 vs 0.98 \n",
" Overfitting \n",
" \n",
" \n",
" 3 \n",
" XGB Classifier \n",
" 0.82 \n",
" 0.68 vs 0.95 \n",
" Overfitting \n",
" \n",
" \n",
" 4 \n",
" Gradient Boosting Classifier \n",
" 0.76 \n",
" 0.70 vs 0.78 \n",
" Slightly Overfitting \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" model used precision Test vs Train precision CV \\\n",
"0 Lgistic Regression 0.75 0.72 vs 0.72 \n",
"1 KNN KNeighborsClassifier 0.76 0.67 vs 0.83 \n",
"2 Random Forest Classifier 0.81 0.70 vs 0.98 \n",
"3 XGB Classifier 0.82 0.68 vs 0.95 \n",
"4 Gradient Boosting Classifier 0.76 0.70 vs 0.78 \n",
"\n",
" Over/Underfitting \n",
"0 No Overfitting \n",
"1 Overfitting \n",
"2 Overfitting \n",
"3 Overfitting \n",
"4 Slightly Overfitting "
]
},
"execution_count": 151,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Comparisons of different models tried and tested\n",
"df_model"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.7608695652173914"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipeline4.fit(X_train, y_train)\n",
"y_predict4 = pipeline4.predict(X_test)\n",
"\n",
"#precision\n",
"from sklearn.metrics import precision_score\n",
"\n",
"precision_score(y_test, y_predict4)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.77\n",
"Precision: 0.76\n",
"Recall: 0.9\n",
"F1 Score: 0.82\n"
]
}
],
"source": [
"from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n",
"\n",
"# Calculate the accuracy\n",
"accuracy = accuracy_score(y_test, y_predict4)\n",
"\n",
"# Calculate the precision\n",
"precision = precision_score(y_test, y_predict4)\n",
"\n",
"# Calculate the recall\n",
"recall = recall_score(y_test, y_predict4)\n",
"\n",
"# Calculate the f1 score\n",
"f1 = f1_score(y_test, y_predict4)\n",
"\n",
"# Print the results\n",
"print(\"Accuracy:\",round(accuracy,2))\n",
"print(\"Precision:\", round(precision,2))\n",
"print(\"Recall:\", round(recall,2))\n",
"print(\"F1 Score:\", round(f1,2))\n",
"\n",
"# Returns:\n",
"# Accuracy: 0.956140350877193\n",
"# Precision: 0.9459459459459459\n",
"# Recall: 0.9859154929577465\n",
"# F1 Score: 0.9655172413793103"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# **The classification model chosen:** \n",
"## *Gradient Boosting Classifier*\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## *Model Scoring Metrics*"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.77\n",
"Precision: 0.76\n",
"Recall: 0.9\n",
"F1 Score: 0.82\n"
]
}
],
"source": [
"print(\"Accuracy:\",round(accuracy,2))\n",
"print(\"Precision:\", round(precision,2))\n",
"print(\"Recall:\", round(recall,2))\n",
"print(\"F1 Score:\", round(f1,2))\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# *Thank you for your attention*\n",
""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.6"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}