This project focuses on building a predictive model to determine whether a customer will subscribe to a term deposit based on their attributes and past interactions with a bank. Using the UCI Bank Marketing Dataset, we applied machine learning techniques, explored data patterns, and derived actionable insights.
- Goal: Predict term deposit subscription (
yesorno). - Dataset: UCI Bank Marketing Dataset (Link).
- Techniques: Data preprocessing, feature engineering, exploratory data analysis (EDA), hyperparameter tuning.
- Best Model: XGBoost, with an F1-Macro Score of 0.9324 and ROC-AUC of 0.9345 after hyperparameter tuning.
The dataset consists of direct marketing campaigns (phone calls) conducted by a Portuguese banking institution. The goal is to predict whether a client will subscribe to a term deposit (y).
The dataset contains 17 input features:
- Client Information:
age,job,marital,education,default,balance,housing,loan. - Last Contact Details:
contact,day,month,duration. - Campaign Performance Metrics:
campaign,pdays,previous,poutcome. - Target Variable:
y(yesornofor term deposit subscription).
-
Exploratory Data Analysis (EDA):
- Visualized distributions, relationships, and correlations.
- Analyzed class imbalance in the target variable.
-
Data Preprocessing:
- Handled missing values and inconsistent data.
- Encoded categorical variables using one-hot encoding and label encoding.
- Standardized numerical features for model compatibility.
-
Feature Engineering:
- Selected important features using tree-based importance metrics.
- Handled class imbalance with SMOTE (Synthetic Minority Oversampling Technique).
-
Model Development:
- Baseline model: Logistic Regression.
- Advanced models: Random Forest and XGBoost.
- Hyperparameter tuning using
RandomizedSearchCV.
-
Evaluation:
- Evaluated models using metrics like F1-score, ROC-AUC, and confusion matrix.
- XGBoost yielded the best performance with optimal hyperparameters.
-
Insights and Recommendations:
- Identified key factors influencing term deposit subscription.
- Provided actionable recommendations for targeted marketing.
-
Model Performance:
- Best Model: XGBoost
- F1-Macro Score: 0.9324
- ROC-AUC Score: 0.9345
-
Feature Importance:
- The most influential features were
housing(has housing loan?),marital_married(is married?),marital_single(is single?),month_mar(is March?), andmonth_apr(is April?).
- The most influential features were
-
Class Imbalance:
- Addressed severe class imbalance using SMOTE, ensuring the model performed well on both classes.
- Confusion Matrix:
- Feature Importance Plot:
- Programming Language: Python
- Libraries:
- Data Processing:
pandas,numpy - Visualization:
matplotlib,seaborn,missingno - Machine Learning:
scikit-learn,XGBoost - Imbalance Handling:
imblearn
- Data Processing:
📂 bank-marketing-prediction
├── 📄 README.md # Project documentation
├── 📄 Analysis.ipynb # EDA, model training, and analysis
├── 📄 best_xgboost_model.pkl # Saved XGBoost model
├── 📊 Confusion-Matrix # Confusion Matrix image
├── 📊 Feature-Importance # Feature Importance image
- Clone the repository:
git clone https://github.com/yourusername/bank-marketing-prediction.git cd bank-marketing-prediction - Install dependencies:
pip install -r requirements.txt
- Run the Jupyter Notebooks for EDA and Model Training:
jupyter notebook eda_notebook.ipynb jupyter notebook model_training.ipynb
-
Aditya Kulkarni
- LinkedIn: @aditya-s-kulkarni
- GitHub: @Aditya-k-23
- Website: adityakulkarni.me
-
Anaqi Amir
- LinkedIn: @anaqi-amir
- GitHub: @AnaqiAmir

