---
id: "bank-marketing"
slug: "bank-marketing"
name: "Bank Marketing"
domain: "Finance & Banking"
taskType: "binary_classification"
numRows: 45211
numColumns: 16
targetColumn: "term_deposit_subscribed"
primaryMetric: "1 - AUC Error"
primaryScore: "0.1970"
parquetUrl: "https://huggingface.co/datasets/carlahq/demo-tabular-benchmarks/resolve/main/data/bank-marketing/bank-marketing.parquet"
spreadsheetUrl: "https://docs.google.com/spreadsheets/d/1yNlDZotC0jxCOCGGx3agTkgm7Fe6b2wKvts7BOKc2rY/edit?usp=sharing"
canonicalUrl: "https://carlahq.eu/datasets/bank-marketing"
---

# Dataset: Bank Marketing (bank-marketing)

> Benchmark dataset of 45,211 direct telemarketing contacts from a Portuguese retail bank to predict long-term deposit subscriptions.

## Dataset Overview

| Attribute | Value |
| :--- | :--- |
| **Task Type** | `binary_classification` |
| **Business Domain** | Finance & Banking |
| **Target Column** | `term_deposit_subscribed` |
| **Rows (Instances)** | 45,211 |
| **Features (Columns)** | 16 |
| **Primary Evaluation Metric** | 1 - AUC Error |
| **Best Benchmark Score** | **0.1970** |

## Business Decision Context
**Context:** Retail banks conduct outbound telemarketing campaigns to drive deposit acquisition and expand balance sheet liquidity. Inbound lead generation and manual outbound dialing are resource-intensive, requiring financial institutions to prioritize prospective customers based on demographic, financial, and previous campaign engagement profiles.
**Objective:** Predict customer propensity to subscribe to a fixed-term deposit ('yes' vs. 'no') prior to initiating outbound contact.
**Decision Impact:** Optimizing contact propensity significantly reduces sales center operating costs, increases marketing conversion rates, and minimizes customer outreach fatigue. False positives lead to wasted outbound agent talk-time and call center overhead, while false negatives represent lost deposit acquisition and customer lifetime value.

## Feature Schema
| Column Name | Data Type | Role | Distinct Values | Missing Values (%) | Description |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `term_deposit_subscribed` | `numeric` | target | 2 | 0 | Target outcome indicating whether the client subscribed to a term deposit (encoded as 1 for 'no' and 2 for 'yes'). |
| `client_age_years` | `numeric` | feature | 77 | 0 | Age of the bank client in years. |
| `client_job_type` | `categorical` | feature | 12 | 0 | Profession or employment category of the client (e.g., admin., management, technician, blue-collar, retired, entrepreneur, student). |
| `marital_status` | `categorical` | feature | 3 | 0 | Marital status of the client ('married', 'single', 'divorced' including widowed). |
| `education_level` | `categorical` | feature | 4 | 0 | Highest completed educational attainment of the client ('primary', 'secondary', 'tertiary', 'unknown'). |
| `has_credit_default` | `categorical` | feature | 2 | 0 | Indicates whether the client has existing credit default history ('yes', 'no'). |
| `average_yearly_balance_eur` | `numeric` | feature | 7,168 | 0 | Average yearly account balance of the customer in euros. |
| `has_housing_loan` | `categorical` | feature | 2 | 0 | Indicates whether the client holds an active residential mortgage/housing loan ('yes', 'no'). |
| `has_personal_loan` | `categorical` | feature | 2 | 0 | Indicates whether the client holds an active personal consumer loan ('yes', 'no'). |
| `contact_communication_type` | `categorical` | feature | 3 | 0 | Communication channel used for the last marketing contact ('cellular', 'telephone', 'unknown'). |
| `last_contact_day_of_month` | `numeric` | feature | 31 | 0 | Day of the month when the client was last contacted. |
| `last_contact_month` | `categorical` | feature | 12 | 0 | Calendar month of the last contact ('jan' through 'dec'). |
| `last_contact_duration_sec` | `numeric` | leakage | 1,573 | 0 | Duration of the last phone interaction in seconds. Note: Highly correlated with final outcome, typically known only after a call completes. |
| `campaign_contacts_count` | `numeric` | feature | 48 | 0 | Total number of contacts performed during this specific marketing campaign for this client. |
| `days_since_previous_campaign` | `numeric` | feature | 559 | 0 | Number of days elapsed after the client was last contacted from a previous marketing campaign (-1 indicates no previous contact). |
| `previous_contacts_count` | `numeric` | feature | 41 | 0 | Number of contacts performed before this campaign for this client across historical initiatives. |
| `previous_campaign_outcome` | `categorical` | feature | 4 | 0 | Result of the previous marketing campaign for this client ('success', 'failure', 'other', 'unknown'). |

## Empirical Benchmark Leaderboard
| Rank | Algorithm / Model | Model Family | Runtime | Accuracy | ROC AUC | F1-Score |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| 1 | **FilteredClassifier MultiSearch LogitBoost REPTree** | Logistic / Linear Model | Python | **90.96%** | 0.9358 | 0.9018 |
| 2 | **J48** | Decision Tree | Python | **90.60%** | 0.8959 | 0.9015 |
| 3 | **FilteredClassifier MultiSearch J48** | Decision Tree | Python | **90.59%** | 0.8838 | 0.9004 |
| 4 | **ClassificationViaRegression M5P** | Decision Tree | Python | **90.56%** | 0.9179 | 0.8989 |
| 5 | **FilteredClassifier MultiSearch RandomForest** | Random Forest | Python | **90.50%** | 0.9301 | 0.8954 |
| 6 | **RandomForest** | Random Forest | Python | **90.50%** | 0.9278 | 0.8968 |
| 7 | **Bagging RandomForest** | Random Forest | Python | **90.50%** | 0.9316 | 0.8950 |
| 8 | **SimpleCart** | Machine Learning Model | Python | **90.50%** | 0.8632 | 0.8989 |
| 9 | **Bagging REPTree** | Decision Tree | Python | **90.48%** | 0.9263 | 0.8989 |
| 10 | **END ND J48** | Decision Tree | Python | **90.46%** | 0.8485 | 0.8994 |
| 11 | **Google TabFM v1.0** | Tabular Foundation Model | PyTorch/Python | **89.63%** | 0.8160 | 0.3763 |
| 12 | **TabPFN v3** | Tabular Foundation Model | PyTorch/Python | **89.61%** | 0.8117 | 0.3554 |
| 13 | **EXAONE Tabular** | Tabular Foundation Model | PyTorch/Python | **89.60%** | 0.8124 | 0.3590 |
| 14 | **nanotabicl Vanilla** | Tabular Foundation Model | PyTorch/Python | **89.55%** | 0.8054 | 0.3566 |
| 15 | **Full TabICLv2 (PyTorch Reference)** | Tabular Foundation Model | PyTorch/Python | **89.53%** | 0.8030 | 0.3676 |

### Repeated Cross-Validation Fold Scores (TabICLv2 Reference)
| Fold | Train Samples | Test Samples | Metric Score | Latency |
| :--- | :--- | :--- | :--- | :--- |
| Fold 0 | 30140 | 15071 | 0.1949 | 21451ms |
| Fold 1 | 30141 | 15070 | 0.1962 | 21567ms |
| Fold 2 | 30141 | 15070 | 0.1928 | 21400ms |
| Fold 0 | 30140 | 15071 | 0.1942 | 21508ms |
| Fold 1 | 30141 | 15070 | 0.2002 | 21429ms |
| Fold 2 | 30141 | 15070 | 0.1988 | 21424ms |
| Fold 0 | 30140 | 15071 | 0.1998 | 21689ms |
| Fold 1 | 30141 | 15070 | 0.1994 | 21475ms |
| Fold 2 | 30141 | 15070 | 0.1969 | 21502ms |

## Provenance & Downloadable Artifacts
- **Dataset Parquet File:** [Direct Parquet Download](https://huggingface.co/datasets/carlahq/demo-tabular-benchmarks/resolve/main/data/bank-marketing/bank-marketing.parquet)
- **Google Sheets Interactive Demo:** [Open in Google Sheets](https://docs.google.com/spreadsheets/d/1yNlDZotC0jxCOCGGx3agTkgm7Fe6b2wKvts7BOKc2rY/edit?usp=sharing)
- **OpenML Source:** [OpenML Dataset](https://www.openml.org/d/1461)
- **Academic Paper / Citation:** [Read Research Paper](https://archive.ics.uci.edu/ml/datasets/bank+marketing)
- **Canonical HTML Page:** [https://carlahq.eu/datasets/bank-marketing](https://carlahq.eu/datasets/bank-marketing)
