File size: 29,423 Bytes
2781e82
 
 
 
 
 
 
f7f4d3e
2781e82
 
d072898
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f7f4d3e
 
 
d072898
 
 
 
 
 
 
 
 
 
 
 
2781e82
705dec3
 
 
8d2956f
 
d072898
705dec3
d072898
f7f4d3e
565cee2
8d2956f
 
 
 
 
 
705dec3
 
 
 
 
f7f4d3e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
705dec3
 
 
 
 
f7f4d3e
705dec3
 
8d2956f
 
 
705dec3
d072898
d2849fc
f7f4d3e
 
 
705dec3
fe21654
ad2cf08
 
 
705dec3
 
 
 
f7f4d3e
705dec3
 
 
8d2956f
705dec3
 
 
8d2956f
f7f4d3e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
---
library_name: sklearn
tags:
- sklearn
- skops
- tabular-classification
model_format: pickle
model_file: skops-89qohtne.pkl
widget:
- structuredData:
    AGE:
    - 32
    - 45
    - 25
    GENDER:
    - m
    - f
    - f
    HOWPAID:
    - 'weekly '
    - 'weekly '
    - 'weekly '
    INCOME:
    - 21772
    - 27553
    - 23477
    LOANS:
    - 1
    - 2
    - 1
    MARITAL:
    - 'married  '
    - divsepwid
    - 'single   '
    MORTGAGE:
    - y
    - y
    - n
    NUMCARDS:
    - 2
    - 6
    - 1
    NUMKIDS:
    - 1
    - 4
    - 1
    STORECAR:
    - 3
    - 5
    - 2
---

# Model description

This is a logistic regression model trained on customers' credit card risk data in a bank using sklearn library.
The model predicts whether a customer is worth issuing a credit card or not. The full dataset can be viewed at the following link: https://huggingface.co/datasets/saifhmb/CreditCardRisk



## Training Procedure

The data preprocessing steps applied include the following:
- Dropping high cardinality features, specifically ID
- Transforming and Encoding categorical features namely: GENDER, MARITAL, HOWPAID, MORTGAGE and the target variable, RISK
- Splitting the dataset into training/test set using 85/15 split ratio
- Applying feature scaling on all features
  
### Hyperparameters

<details>
<summary> Click to expand </summary>

| Hyperparameter                            | Value                                                                                                                                                                                                                                                                       |
|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| memory                                    |                                                                                                                                                                                                                                                                             |
| steps                                     | [('preprocessor', ColumnTransformer(remainder='passthrough',<br />                  transformers=[('cat',<br />                                 Pipeline(steps=[('onehot',<br />                                                  OneHotEncoder(handle_unknown='ignore'))]),<br />                                 ['GENDER', 'MARITAL', 'HOWPAID', 'MORTGAGE']),<br />                                ('num',<br />                                 Pipeline(steps=[('scale', StandardScaler())]),<br />                                 Index(['AGE', 'INCOME', 'NUMKIDS', 'NUMCARDS', 'STORECAR', 'LOANS'], dtype='object'))])), ('classifier', LogisticRegression())]                                                                                                                                                                                                                                                                             |
| verbose                                   | False                                                                                                                                                                                                                                                                       |
| preprocessor                              | ColumnTransformer(remainder='passthrough',<br />                  transformers=[('cat',<br />                                 Pipeline(steps=[('onehot',<br />                                                  OneHotEncoder(handle_unknown='ignore'))]),<br />                                 ['GENDER', 'MARITAL', 'HOWPAID', 'MORTGAGE']),<br />                                ('num',<br />                                 Pipeline(steps=[('scale', StandardScaler())]),<br />                                 Index(['AGE', 'INCOME', 'NUMKIDS', 'NUMCARDS', 'STORECAR', 'LOANS'], dtype='object'))])                                                                                                                                                                                                                                                                             |
| classifier                                | LogisticRegression()                                                                                                                                                                                                                                                        |
| preprocessor__n_jobs                      |                                                                                                                                                                                                                                                                             |
| preprocessor__remainder                   | passthrough                                                                                                                                                                                                                                                                 |
| preprocessor__sparse_threshold            | 0.3                                                                                                                                                                                                                                                                         |
| preprocessor__transformer_weights         |                                                                                                                                                                                                                                                                             |
| preprocessor__transformers                | [('cat', Pipeline(steps=[('onehot', OneHotEncoder(handle_unknown='ignore'))]), ['GENDER', 'MARITAL', 'HOWPAID', 'MORTGAGE']), ('num', Pipeline(steps=[('scale', StandardScaler())]), Index(['AGE', 'INCOME', 'NUMKIDS', 'NUMCARDS', 'STORECAR', 'LOANS'], dtype='object'))] |
| preprocessor__verbose                     | False                                                                                                                                                                                                                                                                       |
| preprocessor__verbose_feature_names_out   | True                                                                                                                                                                                                                                                                        |
| preprocessor__cat                         | Pipeline(steps=[('onehot', OneHotEncoder(handle_unknown='ignore'))])                                                                                                                                                                                                        |
| preprocessor__num                         | Pipeline(steps=[('scale', StandardScaler())])                                                                                                                                                                                                                               |
| preprocessor__cat__memory                 |                                                                                                                                                                                                                                                                             |
| preprocessor__cat__steps                  | [('onehot', OneHotEncoder(handle_unknown='ignore'))]                                                                                                                                                                                                                        |
| preprocessor__cat__verbose                | False                                                                                                                                                                                                                                                                       |
| preprocessor__cat__onehot                 | OneHotEncoder(handle_unknown='ignore')                                                                                                                                                                                                                                      |
| preprocessor__cat__onehot__categories     | auto                                                                                                                                                                                                                                                                        |
| preprocessor__cat__onehot__drop           |                                                                                                                                                                                                                                                                             |
| preprocessor__cat__onehot__dtype          | <class 'numpy.float64'>                                                                                                                                                                                                                                                     |
| preprocessor__cat__onehot__handle_unknown | ignore                                                                                                                                                                                                                                                                      |
| preprocessor__cat__onehot__max_categories |                                                                                                                                                                                                                                                                             |
| preprocessor__cat__onehot__min_frequency  |                                                                                                                                                                                                                                                                             |
| preprocessor__cat__onehot__sparse         | deprecated                                                                                                                                                                                                                                                                  |
| preprocessor__cat__onehot__sparse_output  | True                                                                                                                                                                                                                                                                        |
| preprocessor__num__memory                 |                                                                                                                                                                                                                                                                             |
| preprocessor__num__steps                  | [('scale', StandardScaler())]                                                                                                                                                                                                                                               |
| preprocessor__num__verbose                | False                                                                                                                                                                                                                                                                       |
| preprocessor__num__scale                  | StandardScaler()                                                                                                                                                                                                                                                            |
| preprocessor__num__scale__copy            | True                                                                                                                                                                                                                                                                        |
| preprocessor__num__scale__with_mean       | True                                                                                                                                                                                                                                                                        |
| preprocessor__num__scale__with_std        | True                                                                                                                                                                                                                                                                        |
| classifier__C                             | 1.0                                                                                                                                                                                                                                                                         |
| classifier__class_weight                  |                                                                                                                                                                                                                                                                             |
| classifier__dual                          | False                                                                                                                                                                                                                                                                       |
| classifier__fit_intercept                 | True                                                                                                                                                                                                                                                                        |
| classifier__intercept_scaling             | 1                                                                                                                                                                                                                                                                           |
| classifier__l1_ratio                      |                                                                                                                                                                                                                                                                             |
| classifier__max_iter                      | 100                                                                                                                                                                                                                                                                         |
| classifier__multi_class                   | auto                                                                                                                                                                                                                                                                        |
| classifier__n_jobs                        |                                                                                                                                                                                                                                                                             |
| classifier__penalty                       | l2                                                                                                                                                                                                                                                                          |
| classifier__random_state                  |                                                                                                                                                                                                                                                                             |
| classifier__solver                        | lbfgs                                                                                                                                                                                                                                                                       |
| classifier__tol                           | 0.0001                                                                                                                                                                                                                                                                      |
| classifier__verbose                       | 0                                                                                                                                                                                                                                                                           |
| classifier__warm_start                    | False                                                                                                                                                                                                                                                                       |

</details>

### Model Plot

<style>#sk-container-id-13 {color: black;background-color: white;}#sk-container-id-13 pre{padding: 0;}#sk-container-id-13 div.sk-toggleable {background-color: white;}#sk-container-id-13 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-13 label.sk-toggleable__label-arrow:before {content: "▸";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-13 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-13 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-13 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-13 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-13 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-13 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: "▾";}#sk-container-id-13 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-13 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-13 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-13 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-13 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-13 div.sk-parallel-item::after {content: "";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-13 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-13 div.sk-serial::before {content: "";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-13 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-13 div.sk-item {position: relative;z-index: 1;}#sk-container-id-13 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-13 div.sk-item::before, #sk-container-id-13 div.sk-parallel-item::before {content: "";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-13 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-13 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-13 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-13 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-13 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-13 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-13 div.sk-label-container {text-align: center;}#sk-container-id-13 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-13 div.sk-text-repr-fallback {display: none;}</style><div id="sk-container-id-13" class="sk-top-container" style="overflow: auto;"><div class="sk-text-repr-fallback"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,ColumnTransformer(remainder=&#x27;passthrough&#x27;,transformers=[(&#x27;cat&#x27;,Pipeline(steps=[(&#x27;onehot&#x27;,OneHotEncoder(handle_unknown=&#x27;ignore&#x27;))]),[&#x27;GENDER&#x27;, &#x27;MARITAL&#x27;,&#x27;HOWPAID&#x27;, &#x27;MORTGAGE&#x27;]),(&#x27;num&#x27;,Pipeline(steps=[(&#x27;scale&#x27;,StandardScaler())]),Index([&#x27;AGE&#x27;, &#x27;INCOME&#x27;, &#x27;NUMKIDS&#x27;, &#x27;NUMCARDS&#x27;, &#x27;STORECAR&#x27;, &#x27;LOANS&#x27;], dtype=&#x27;object&#x27;))])),(&#x27;classifier&#x27;, LogisticRegression())])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class="sk-container" hidden><div class="sk-item sk-dashed-wrapped"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-97" type="checkbox" ><label for="sk-estimator-id-97" class="sk-toggleable__label sk-toggleable__label-arrow">Pipeline</label><div class="sk-toggleable__content"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,ColumnTransformer(remainder=&#x27;passthrough&#x27;,transformers=[(&#x27;cat&#x27;,Pipeline(steps=[(&#x27;onehot&#x27;,OneHotEncoder(handle_unknown=&#x27;ignore&#x27;))]),[&#x27;GENDER&#x27;, &#x27;MARITAL&#x27;,&#x27;HOWPAID&#x27;, &#x27;MORTGAGE&#x27;]),(&#x27;num&#x27;,Pipeline(steps=[(&#x27;scale&#x27;,StandardScaler())]),Index([&#x27;AGE&#x27;, &#x27;INCOME&#x27;, &#x27;NUMKIDS&#x27;, &#x27;NUMCARDS&#x27;, &#x27;STORECAR&#x27;, &#x27;LOANS&#x27;], dtype=&#x27;object&#x27;))])),(&#x27;classifier&#x27;, LogisticRegression())])</pre></div></div></div><div class="sk-serial"><div class="sk-item sk-dashed-wrapped"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-98" type="checkbox" ><label for="sk-estimator-id-98" class="sk-toggleable__label sk-toggleable__label-arrow">preprocessor: ColumnTransformer</label><div class="sk-toggleable__content"><pre>ColumnTransformer(remainder=&#x27;passthrough&#x27;,transformers=[(&#x27;cat&#x27;,Pipeline(steps=[(&#x27;onehot&#x27;,OneHotEncoder(handle_unknown=&#x27;ignore&#x27;))]),[&#x27;GENDER&#x27;, &#x27;MARITAL&#x27;, &#x27;HOWPAID&#x27;, &#x27;MORTGAGE&#x27;]),(&#x27;num&#x27;,Pipeline(steps=[(&#x27;scale&#x27;, StandardScaler())]),Index([&#x27;AGE&#x27;, &#x27;INCOME&#x27;, &#x27;NUMKIDS&#x27;, &#x27;NUMCARDS&#x27;, &#x27;STORECAR&#x27;, &#x27;LOANS&#x27;], dtype=&#x27;object&#x27;))])</pre></div></div></div><div class="sk-parallel"><div class="sk-parallel-item"><div class="sk-item"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-99" type="checkbox" ><label for="sk-estimator-id-99" class="sk-toggleable__label sk-toggleable__label-arrow">cat</label><div class="sk-toggleable__content"><pre>[&#x27;GENDER&#x27;, &#x27;MARITAL&#x27;, &#x27;HOWPAID&#x27;, &#x27;MORTGAGE&#x27;]</pre></div></div></div><div class="sk-serial"><div class="sk-item"><div class="sk-serial"><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-100" type="checkbox" ><label for="sk-estimator-id-100" class="sk-toggleable__label sk-toggleable__label-arrow">OneHotEncoder</label><div class="sk-toggleable__content"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;)</pre></div></div></div></div></div></div></div></div><div class="sk-parallel-item"><div class="sk-item"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-101" type="checkbox" ><label for="sk-estimator-id-101" class="sk-toggleable__label sk-toggleable__label-arrow">num</label><div class="sk-toggleable__content"><pre>Index([&#x27;AGE&#x27;, &#x27;INCOME&#x27;, &#x27;NUMKIDS&#x27;, &#x27;NUMCARDS&#x27;, &#x27;STORECAR&#x27;, &#x27;LOANS&#x27;], dtype=&#x27;object&#x27;)</pre></div></div></div><div class="sk-serial"><div class="sk-item"><div class="sk-serial"><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-102" type="checkbox" ><label for="sk-estimator-id-102" class="sk-toggleable__label sk-toggleable__label-arrow">StandardScaler</label><div class="sk-toggleable__content"><pre>StandardScaler()</pre></div></div></div></div></div></div></div></div><div class="sk-parallel-item"><div class="sk-item"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-103" type="checkbox" ><label for="sk-estimator-id-103" class="sk-toggleable__label sk-toggleable__label-arrow">remainder</label><div class="sk-toggleable__content"><pre>[]</pre></div></div></div><div class="sk-serial"><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-104" type="checkbox" ><label for="sk-estimator-id-104" class="sk-toggleable__label sk-toggleable__label-arrow">passthrough</label><div class="sk-toggleable__content"><pre>passthrough</pre></div></div></div></div></div></div></div></div><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-105" type="checkbox" ><label for="sk-estimator-id-105" class="sk-toggleable__label sk-toggleable__label-arrow">LogisticRegression</label><div class="sk-toggleable__content"><pre>LogisticRegression()</pre></div></div></div></div></div></div></div>

## Evaluation Results
- The target variable, RISK is multiclass. In sklearn, precision and recall functions have a parameter called,
average. This parameter is required for a multiclass/multilabel target. average = 'micro' was used to calculate
the precision and recall metrics globally by counting the total true positives, false negatives and false positives

| Metric    |    Value |
|-----------|----------|
| accuracy  | 0.699187 |
| precision | 0.699187 |
| recall    | 0.699187 |

### Model Explainability
SHAP was used to determine the important features that helps the model make decisions
![image/png](https://cdn-uploads.huggingface.co/production/uploads/6662300a0ad8c45a1ce59190/OhZPMDUQi1N4R0XlMQm9A.png)

### Confusion Matrix

![Confusion Matrix](confusion_matrix.png)



# Model Card Authors

This model card is written by following authors: Seifullah Bello

# Model Card Contact

You can contact the model card authors through following channels: [email protected]