Аналитический отчет

library(dplyr)
library(readr)
clients_database <- read_csv("C:\\Users\\Админ\\Downloads\\clientum.csv")
clients_database1 = subset(clients_database, select = - c(...1)) 
str(clients_database1)
## tibble [10,127 × 21] (S3: tbl_df/tbl/data.frame)
##  $ CLIENTNUM               : num [1:10127] 7.69e+08 8.19e+08 7.14e+08 7.70e+08 7.09e+08 ...
##  $ Attrition_Flag          : chr [1:10127] "Existing Customer" "Existing Customer" "Existing Customer" "Existing Customer" ...
##  $ Customer_Age            : num [1:10127] 45 49 51 40 40 44 51 32 37 48 ...
##  $ Gender                  : chr [1:10127] "M" "F" "M" "F" ...
##  $ Dependent_count         : num [1:10127] 3 5 3 4 3 2 4 0 3 2 ...
##  $ Education_Level         : chr [1:10127] "High School" "Graduate" "Graduate" "High School" ...
##  $ Marital_Status          : chr [1:10127] "Married" "Single" "Married" "Unknown" ...
##  $ Income_Category         : chr [1:10127] "$60K - $80K" "Less than $40K" "$80K - $120K" "Less than $40K" ...
##  $ Card_Category           : chr [1:10127] "Blue" "Blue" "Blue" "Blue" ...
##  $ Months_on_book          : num [1:10127] 39 44 36 34 21 36 46 27 36 36 ...
##  $ Total_Relationship_Count: num [1:10127] 5 6 4 3 5 3 6 2 5 6 ...
##  $ Months_Inactive_12_mon  : num [1:10127] 1 1 1 4 1 1 1 2 2 3 ...
##  $ Contacts_Count_12_mon   : num [1:10127] 3 2 0 1 0 2 3 2 0 3 ...
##  $ Credit_Limit            : num [1:10127] 12691 8256 3418 3313 4716 ...
##  $ Total_Revolving_Bal     : num [1:10127] 777 864 0 2517 0 ...
##  $ Avg_Open_To_Buy         : num [1:10127] 11914 7392 3418 796 4716 ...
##  $ Total_Amt_Chng_Q4_Q1    : num [1:10127] 1.33 1.54 2.59 1.4 2.17 ...
##  $ Total_Trans_Amt         : num [1:10127] 1144 1291 1887 1171 816 ...
##  $ Total_Trans_Ct          : num [1:10127] 42 33 20 20 28 24 31 36 24 32 ...
##  $ Total_Ct_Chng_Q4_Q1     : num [1:10127] 1.62 3.71 2.33 2.33 2.5 ...
##  $ Avg_Utilization_Ratio   : num [1:10127] 0.061 0.105 0 0.76 0 0.311 0.066 0.048 0.113 0.144 ...
head(clients_database1)
## # A tibble: 6 × 21
##   CLIENTNUM Attrition_Flag   Customer_Age Gender Dependent_count Education_Level
##       <dbl> <chr>                   <dbl> <chr>            <dbl> <chr>          
## 1 768805383 Existing Custom…           45 M                    3 High School    
## 2 818770008 Existing Custom…           49 F                    5 Graduate       
## 3 713982108 Existing Custom…           51 M                    3 Graduate       
## 4 769911858 Existing Custom…           40 F                    4 High School    
## 5 709106358 Existing Custom…           40 M                    3 Uneducated     
## 6 713061558 Existing Custom…           44 M                    2 Graduate       
## # ℹ 15 more variables: Marital_Status <chr>, Income_Category <chr>,
## #   Card_Category <chr>, Months_on_book <dbl>, Total_Relationship_Count <dbl>,
## #   Months_Inactive_12_mon <dbl>, Contacts_Count_12_mon <dbl>,
## #   Credit_Limit <dbl>, Total_Revolving_Bal <dbl>, Avg_Open_To_Buy <dbl>,
## #   Total_Amt_Chng_Q4_Q1 <dbl>, Total_Trans_Amt <dbl>, Total_Trans_Ct <dbl>,
## #   Total_Ct_Chng_Q4_Q1 <dbl>, Avg_Utilization_Ratio <dbl>

Обработка данных

Проверка на NA и повторения

sum(is.na(clients_database1)) 
## [1] 0
sum(duplicated(clients_database1)==TRUE)
## [1] 0

Преобразование в .numeric

clients_database1$Gender <- as.factor(clients_database1$Gender)
clients_database1$Gender <- as.numeric(clients_database1$Gender)
clients_database1$Gender <- clients_database1$Gender - 1
clients_database1$Education_Level <- as.factor(clients_database1$Education_Level)
clients_database1$Education_Level <- as.numeric(clients_database1$Education_Level)
clients_database1$Education_Level <- clients_database1$Education_Level - 1
clients_database1$Attrition_Flag <- as.factor(clients_database1$Attrition_Flag)
clients_database1$Attrition_Flag <- as.numeric(clients_database1$Attrition_Flag)
clients_database1$Attrition_Flag <- clients_database1$Attrition_Flag - 1
clients_database1$Marital_Status <- as.factor(clients_database1$Marital_Status)
clients_database1$Marital_Status <- as.numeric(clients_database1$Marital_Status)
clients_database1$Marital_Status <- clients_database1$Marital_Status - 1
clients_database1$Income_Category <- as.factor(clients_database1$Income_Category)
clients_database1$Income_Category <- as.numeric(clients_database1$Income_Category)
clients_database1$Income_Category <- clients_database1$Income_Category - 1
clients_database1$Card_Category <- as.factor(clients_database1$Card_Category)
clients_database1$Card_Category <- as.numeric(clients_database1$Card_Category)
clients_database1$Card_Category <- clients_database1$Card_Category - 1

Проверка на выбросы

library(ggplot2)
library(gridExtra)
box1 <-ggplot(clients_database1) +
  aes(y = Customer_Age) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в возрастных данных") +
    ylab("Возраст") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 ))  +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))  
box2 <-ggplot(clients_database1) +
  aes(y = Avg_Open_To_Buy) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в доступности денег к покупкам") +
    ylab("Доступность денег к покупке") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 )) +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
box3 <-ggplot(clients_database1) +
  aes(y = Credit_Limit) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в лимитах по кредитным лимитам") +
    ylab("Кредитный лимит") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 ))  +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
box4 <-ggplot(clients_database1) +
  aes(y = Total_Revolving_Bal) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в суммах невыплаченных кредитов") +
    ylab("Невыплаченный кредит") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 ))  +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
box5 <-ggplot(clients_database1) +
  aes(y = Total_Trans_Amt) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в суммах транзакций (12 мес.)") +
    ylab("Сумма транзакции") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 ))  +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
box6 <-ggplot(clients_database1) +
  aes(y = Total_Trans_Ct) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в суммах транзакций") +
    ylab("Сумма транзакции") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 ))  +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
box7 <-ggplot(clients_database1) +
  aes(y = Total_Ct_Chng_Q4_Q1) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в суммах транзакций (4Q:1Q)") +
    ylab("Отношение") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 ))  +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))  
box8 <-ggplot(clients_database1) +
  aes(y = Avg_Utilization_Ratio) +
  geom_boxplot(fill = "lightblue", color = "blue") +
    ggtitle("Выбросы в среднем использовании карты (потраченные/доступные") +
    ylab("Отношение") +
    xlab(NULL)+
    theme(plot.title = element_text (hjust = 0.5 ))  +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
grid.arrange(box1, box2, box3, box4, box5, box6, box7, box8, ncol=2)

Описательная статистика

library(psych)
describe(clients_database1)
##                          vars     n         mean          sd       median
## CLIENTNUM                   1 10127 739177606.33 36903783.45 717926358.00
## Attrition_Flag              2 10127         0.84        0.37         1.00
## Customer_Age                3 10127        46.33        8.02        46.00
## Gender                      4 10127         0.47        0.50         0.00
## Dependent_count             5 10127         2.35        1.30         2.00
## Education_Level             6 10127         3.10        1.83         3.00
## Marital_Status              7 10127         1.46        0.74         1.00
## Income_Category             8 10127         2.86        1.50         3.00
## Card_Category               9 10127         0.18        0.69         0.00
## Months_on_book             10 10127        35.93        7.99        36.00
## Total_Relationship_Count   11 10127         3.81        1.55         4.00
## Months_Inactive_12_mon     12 10127         2.34        1.01         2.00
## Contacts_Count_12_mon      13 10127         2.46        1.11         2.00
## Credit_Limit               14 10127      8631.95     9088.78      4549.00
## Total_Revolving_Bal        15 10127      1162.81      814.99      1276.00
## Avg_Open_To_Buy            16 10127      7469.14     9090.69      3474.00
## Total_Amt_Chng_Q4_Q1       17 10127         0.76        0.22         0.74
## Total_Trans_Amt            18 10127      4404.09     3397.13      3899.00
## Total_Trans_Ct             19 10127        64.86       23.47        67.00
## Total_Ct_Chng_Q4_Q1        20 10127         0.71        0.24         0.70
## Avg_Utilization_Ratio      21 10127         0.27        0.28         0.18
##                               trimmed        mad         min          max
## CLIENTNUM                733606202.47 9411100.02 708082083.0 828343083.00
## Attrition_Flag                   0.92       0.00         0.0         1.00
## Customer_Age                    46.35       8.90        26.0        73.00
## Gender                           0.46       0.00         0.0         1.00
## Dependent_count                  2.37       1.48         0.0         5.00
## Education_Level                  3.12       1.48         0.0         6.00
## Marital_Status                   1.45       1.48         0.0         3.00
## Income_Category                  2.92       1.48         0.0         5.00
## Card_Category                    0.00       0.00         0.0         3.00
## Months_on_book                  35.99       5.93        13.0        56.00
## Total_Relationship_Count         3.88       1.48         1.0         6.00
## Months_Inactive_12_mon           2.29       1.48         0.0         6.00
## Contacts_Count_12_mon            2.46       1.48         0.0         6.00
## Credit_Limit                  6685.09    3844.38      1438.3     34516.00
## Total_Revolving_Bal           1148.50     876.22         0.0      2517.00
## Avg_Open_To_Buy               5514.94    3951.13         3.0     34516.00
## Total_Amt_Chng_Q4_Q1             0.74       0.17         0.0         3.40
## Total_Trans_Amt               3707.92    1939.24       510.0     18484.00
## Total_Trans_Ct                  64.30      25.20        10.0       139.00
## Total_Ct_Chng_Q4_Q1              0.70       0.18         0.0         3.71
## Avg_Utilization_Ratio            0.24       0.26         0.0         1.00
##                                range  skew kurtosis        se
## CLIENTNUM                1.20261e+08  1.00    -0.62 366716.53
## Attrition_Flag           1.00000e+00 -1.85     1.41      0.00
## Customer_Age             4.70000e+01 -0.03    -0.29      0.08
## Gender                   1.00000e+00  0.12    -1.99      0.00
## Dependent_count          5.00000e+00 -0.02    -0.68      0.01
## Education_Level          6.00000e+00  0.15    -0.96      0.02
## Marital_Status           3.00000e+00  0.13    -0.28      0.01
## Income_Category          5.00000e+00 -0.39    -1.07      0.01
## Card_Category            3.00000e+00  3.73    12.15      0.01
## Months_on_book           4.30000e+01 -0.11     0.40      0.08
## Total_Relationship_Count 5.00000e+00 -0.16    -1.01      0.02
## Months_Inactive_12_mon   6.00000e+00  0.63     1.10      0.01
## Contacts_Count_12_mon    6.00000e+00  0.01     0.00      0.01
## Credit_Limit             3.30777e+04  1.67     1.81     90.32
## Total_Revolving_Bal      2.51700e+03 -0.15    -1.15      8.10
## Avg_Open_To_Buy          3.45130e+04  1.66     1.80     90.34
## Total_Amt_Chng_Q4_Q1     3.40000e+00  1.73     9.99      0.00
## Total_Trans_Amt          1.79740e+04  2.04     3.89     33.76
## Total_Trans_Ct           1.29000e+02  0.15    -0.37      0.23
## Total_Ct_Chng_Q4_Q1      3.71000e+00  2.06    15.68      0.00
## Avg_Utilization_Ratio    1.00000e+00  0.72    -0.80      0.00

Анализ на нормальное распределение данных

Гистограммы

hist1 <-ggplot(clients_database1, aes(x = Customer_Age)) + 
    geom_histogram(binwidth = 1, fill = "blue", color = "white", alpha = 0.7) +
    ggtitle("Распределение возраста клиентов") +
    xlab("Возраст") +
    ylab("Частота")+
    theme(plot.title = element_text (hjust = 0.5 )) +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
hist2 <-ggplot(clients_database1, aes(x = Avg_Open_To_Buy)) + 
    geom_histogram(binwidth = 500, fill = "blue", color = "white", alpha = 0.7) +
    ggtitle("Распределение доступности денег к покупкам") +
    xlab("Доступность денег к покупке") +
    ylab("Частота")+
    theme(plot.title = element_text (hjust = 0.5 )) +
    theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
hist3 <-ggplot(clients_database1, aes(x = Credit_Limit)) + 
  geom_histogram(binwidth = 500, fill = "blue", color = "white", alpha = 0.7) +
  ggtitle("Распределение кредитного лимита клиентов") +
  xlab("Кредитный лимит") +
  ylab("Частота")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
hist4 <-ggplot(clients_database1, aes(x = Total_Revolving_Bal)) + 
  geom_histogram(binwidth = 50, fill = "blue", color = "white", alpha = 0.7) +
  ggtitle("Распределение по сумме невыплаченного кредита") +
  xlab("Сумма невыплаченного кредита") +
  ylab("Частота")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6)) 
hist5 <-ggplot(clients_database1, aes(x = Total_Trans_Amt)) + 
  geom_histogram(binwidth = 700, fill = "blue", color = "white", alpha = 0.7) +
  ggtitle("Распределение по сумме транзакций (12 мес.)") +
  xlab("Сумма транзакций") +
  ylab("Частота")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
hist6 <-ggplot(clients_database1, aes(x = Total_Trans_Ct)) + 
  geom_histogram(binwidth = 5, fill = "blue", color = "white", alpha = 0.7) +
  ggtitle("Распределение по сумме транзакций") +
  xlab("Сумма транзакций") +
  ylab("Частота")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
hist7 <-ggplot(clients_database1, aes(x = Total_Ct_Chng_Q4_Q1)) + 
  geom_histogram(binwidth = 0.05, fill = "blue", color = "white", alpha = 0.7) +
  ggtitle("Распределение по сумме транзакций (4Q:1Q)") +
  xlab("Отношение") +
  ylab("Частота")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
hist8 <-ggplot(clients_database1, aes(x = Avg_Utilization_Ratio)) + 
  geom_histogram(binwidth = 0.05, fill = "blue", color = "white", alpha = 0.7) +
  ggtitle("Среднее использование карты (потраченные/доступные)") +
  xlab("Отношение") +
  ylab("Частота")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 7)) +
    theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
    theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
grid.arrange(hist1, hist2, hist3, hist4,hist5,hist6, hist7, hist8, ncol=2)

QQ-plot

qqnorm(clients_database1$Customer_Age, main = "Q-Q график (Customer_age)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Customer_Age)

qqnorm(clients_database1$Months_on_book, main = "Q-Q график (Months_on_book)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Months_on_book) 

qqnorm(clients_database1$Credit_Limit, main = "Q-Q график (Credit_Limit)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Credit_Limit)

qqnorm(clients_database1$Total_Revolving_Bal, main = "Q-Q график (Total_Revolving_Bal)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Total_Revolving_Bal) 

qqnorm(clients_database1$Avg_Open_To_Buy, main = "Q-Q график (Avg_Open_To_Buy)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Avg_Open_To_Buy) 

qqnorm(clients_database1$Total_Trans_Amt, main = "Q-Q график (Total_Trans_Amt)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Total_Trans_Amt)

qqnorm(clients_database1$Total_Trans_Ct, main = "Q-Q график (Total_Trans_Ct)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Total_Trans_Ct) 

qqnorm(clients_database1$Total_Ct_Chng_Q4_Q1, main = "Q-Q график (Total_Ct_Chng_Q4_Q1)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Total_Ct_Chng_Q4_Q1) 

qqnorm(clients_database1$Avg_Utilization_Ratio, main = "Q-Q график (Avg_Utilization_Ratio)",xlab = "Теоретические квантили", ylab = "Фактические квантили", col = "lightblue"); qqline(clients_database1$Avg_Utilization_Ratio) 

Тест Колмогорова-Смирнова

ks.test(clients_database1$Customer_Age, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Customer_Age
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Months_on_book, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Months_on_book
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Credit_Limit, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Credit_Limit
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Total_Revolving_Bal, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Total_Revolving_Bal
## D = 0.7561, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Avg_Open_To_Buy, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Avg_Open_To_Buy
## D = 0.9999, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Total_Trans_Amt, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Total_Trans_Amt
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Total_Trans_Ct, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Total_Trans_Ct
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Total_Ct_Chng_Q4_Q1, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Total_Ct_Chng_Q4_Q1
## D = 0.59814, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(clients_database1$Avg_Utilization_Ratio, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  clients_database1$Avg_Utilization_Ratio
## D = 0.5, p-value < 2.2e-16
## alternative hypothesis: two-sided

Корреляционый анализ и корреляционная матрица

cor_clients_database1 <-cor(clients_database1)
round(cor_clients_database1, 2)
##                          CLIENTNUM Attrition_Flag Customer_Age Gender
## CLIENTNUM                     1.00           0.05         0.01   0.02
## Attrition_Flag                0.05           1.00        -0.02   0.04
## Customer_Age                  0.01          -0.02         1.00  -0.02
## Gender                        0.02           0.04        -0.02   1.00
## Dependent_count               0.01          -0.02        -0.12   0.00
## Education_Level               0.00          -0.01         0.00   0.00
## Marital_Status                0.00          -0.02        -0.01   0.00
## Income_Category              -0.03          -0.02        -0.01  -0.54
## Card_Category                 0.01           0.01        -0.02   0.08
## Months_on_book                0.13          -0.01         0.79  -0.01
## Total_Relationship_Count      0.01           0.15        -0.01   0.00
## Months_Inactive_12_mon        0.01          -0.15         0.05  -0.01
## Contacts_Count_12_mon         0.01          -0.20        -0.02   0.04
## Credit_Limit                  0.01           0.02         0.00   0.42
## Total_Revolving_Bal           0.00           0.26         0.01   0.03
## Avg_Open_To_Buy               0.01           0.00         0.00   0.42
## Total_Amt_Chng_Q4_Q1          0.02           0.13        -0.06   0.03
## Total_Trans_Amt              -0.02           0.17        -0.05   0.02
## Total_Trans_Ct                0.00           0.37        -0.07  -0.07
## Total_Ct_Chng_Q4_Q1           0.01           0.29        -0.01  -0.01
## Avg_Utilization_Ratio         0.00           0.18         0.01  -0.26
##                          Dependent_count Education_Level Marital_Status
## CLIENTNUM                           0.01            0.00           0.00
## Attrition_Flag                     -0.02           -0.01          -0.02
## Customer_Age                       -0.12            0.00          -0.01
## Gender                              0.00            0.00           0.00
## Dependent_count                     1.00            0.00           0.00
## Education_Level                     0.00            1.00           0.01
## Marital_Status                      0.00            0.01           1.00
## Income_Category                    -0.04           -0.01           0.01
## Card_Category                       0.02           -0.01           0.04
## Months_on_book                     -0.10            0.00          -0.01
## Total_Relationship_Count           -0.04            0.01          -0.02
## Months_Inactive_12_mon             -0.01           -0.01           0.00
## Contacts_Count_12_mon              -0.04            0.01           0.00
## Credit_Limit                        0.07            0.00           0.03
## Total_Revolving_Bal                 0.00            0.01          -0.03
## Avg_Open_To_Buy                     0.07            0.00           0.03
## Total_Amt_Chng_Q4_Q1               -0.04            0.01          -0.04
## Total_Trans_Amt                     0.03            0.02           0.04
## Total_Trans_Ct                      0.05            0.00           0.08
## Total_Ct_Chng_Q4_Q1                 0.01            0.01           0.00
## Avg_Utilization_Ratio              -0.04            0.01          -0.03
##                          Income_Category Card_Category Months_on_book
## CLIENTNUM                          -0.03          0.01           0.13
## Attrition_Flag                     -0.02          0.01          -0.01
## Customer_Age                       -0.01         -0.02           0.79
## Gender                             -0.54          0.08          -0.01
## Dependent_count                    -0.04          0.02          -0.10
## Education_Level                    -0.01         -0.01           0.00
## Marital_Status                      0.01          0.04          -0.01
## Income_Category                     1.00         -0.05          -0.02
## Card_Category                      -0.05          1.00          -0.01
## Months_on_book                     -0.02         -0.01           1.00
## Total_Relationship_Count            0.01         -0.07          -0.01
## Months_Inactive_12_mon              0.02         -0.02           0.07
## Contacts_Count_12_mon              -0.02          0.00          -0.01
## Credit_Limit                       -0.23          0.48           0.01
## Total_Revolving_Bal                -0.03          0.02           0.01
## Avg_Open_To_Buy                    -0.22          0.48           0.01
## Total_Amt_Chng_Q4_Q1                0.00          0.00          -0.05
## Total_Trans_Amt                    -0.01          0.18          -0.04
## Total_Trans_Ct                      0.03          0.12          -0.05
## Total_Ct_Chng_Q4_Q1                 0.01          0.00          -0.01
## Avg_Utilization_Ratio               0.12         -0.21          -0.01
##                          Total_Relationship_Count Months_Inactive_12_mon
## CLIENTNUM                                    0.01                   0.01
## Attrition_Flag                               0.15                  -0.15
## Customer_Age                                -0.01                   0.05
## Gender                                       0.00                  -0.01
## Dependent_count                             -0.04                  -0.01
## Education_Level                              0.01                  -0.01
## Marital_Status                              -0.02                   0.00
## Income_Category                              0.01                   0.02
## Card_Category                               -0.07                  -0.02
## Months_on_book                              -0.01                   0.07
## Total_Relationship_Count                     1.00                   0.00
## Months_Inactive_12_mon                       0.00                   1.00
## Contacts_Count_12_mon                        0.06                   0.03
## Credit_Limit                                -0.07                  -0.02
## Total_Revolving_Bal                          0.01                  -0.04
## Avg_Open_To_Buy                             -0.07                  -0.02
## Total_Amt_Chng_Q4_Q1                         0.05                  -0.03
## Total_Trans_Amt                             -0.35                  -0.04
## Total_Trans_Ct                              -0.24                  -0.04
## Total_Ct_Chng_Q4_Q1                          0.04                  -0.04
## Avg_Utilization_Ratio                        0.07                  -0.01
##                          Contacts_Count_12_mon Credit_Limit Total_Revolving_Bal
## CLIENTNUM                                 0.01         0.01                0.00
## Attrition_Flag                           -0.20         0.02                0.26
## Customer_Age                             -0.02         0.00                0.01
## Gender                                    0.04         0.42                0.03
## Dependent_count                          -0.04         0.07                0.00
## Education_Level                           0.01         0.00                0.01
## Marital_Status                            0.00         0.03               -0.03
## Income_Category                          -0.02        -0.23               -0.03
## Card_Category                             0.00         0.48                0.02
## Months_on_book                           -0.01         0.01                0.01
## Total_Relationship_Count                  0.06        -0.07                0.01
## Months_Inactive_12_mon                    0.03        -0.02               -0.04
## Contacts_Count_12_mon                     1.00         0.02               -0.05
## Credit_Limit                              0.02         1.00                0.04
## Total_Revolving_Bal                      -0.05         0.04                1.00
## Avg_Open_To_Buy                           0.03         1.00               -0.05
## Total_Amt_Chng_Q4_Q1                     -0.02         0.01                0.06
## Total_Trans_Amt                          -0.11         0.17                0.06
## Total_Trans_Ct                           -0.15         0.08                0.06
## Total_Ct_Chng_Q4_Q1                      -0.09         0.00                0.09
## Avg_Utilization_Ratio                    -0.06        -0.48                0.62
##                          Avg_Open_To_Buy Total_Amt_Chng_Q4_Q1 Total_Trans_Amt
## CLIENTNUM                           0.01                 0.02           -0.02
## Attrition_Flag                      0.00                 0.13            0.17
## Customer_Age                        0.00                -0.06           -0.05
## Gender                              0.42                 0.03            0.02
## Dependent_count                     0.07                -0.04            0.03
## Education_Level                     0.00                 0.01            0.02
## Marital_Status                      0.03                -0.04            0.04
## Income_Category                    -0.22                 0.00           -0.01
## Card_Category                       0.48                 0.00            0.18
## Months_on_book                      0.01                -0.05           -0.04
## Total_Relationship_Count           -0.07                 0.05           -0.35
## Months_Inactive_12_mon             -0.02                -0.03           -0.04
## Contacts_Count_12_mon               0.03                -0.02           -0.11
## Credit_Limit                        1.00                 0.01            0.17
## Total_Revolving_Bal                -0.05                 0.06            0.06
## Avg_Open_To_Buy                     1.00                 0.01            0.17
## Total_Amt_Chng_Q4_Q1                0.01                 1.00            0.04
## Total_Trans_Amt                     0.17                 0.04            1.00
## Total_Trans_Ct                      0.07                 0.01            0.81
## Total_Ct_Chng_Q4_Q1                -0.01                 0.38            0.09
## Avg_Utilization_Ratio              -0.54                 0.04           -0.08
##                          Total_Trans_Ct Total_Ct_Chng_Q4_Q1
## CLIENTNUM                          0.00                0.01
## Attrition_Flag                     0.37                0.29
## Customer_Age                      -0.07               -0.01
## Gender                            -0.07               -0.01
## Dependent_count                    0.05                0.01
## Education_Level                    0.00                0.01
## Marital_Status                     0.08                0.00
## Income_Category                    0.03                0.01
## Card_Category                      0.12                0.00
## Months_on_book                    -0.05               -0.01
## Total_Relationship_Count          -0.24                0.04
## Months_Inactive_12_mon            -0.04               -0.04
## Contacts_Count_12_mon             -0.15               -0.09
## Credit_Limit                       0.08                0.00
## Total_Revolving_Bal                0.06                0.09
## Avg_Open_To_Buy                    0.07               -0.01
## Total_Amt_Chng_Q4_Q1               0.01                0.38
## Total_Trans_Amt                    0.81                0.09
## Total_Trans_Ct                     1.00                0.11
## Total_Ct_Chng_Q4_Q1                0.11                1.00
## Avg_Utilization_Ratio              0.00                0.07
##                          Avg_Utilization_Ratio
## CLIENTNUM                                 0.00
## Attrition_Flag                            0.18
## Customer_Age                              0.01
## Gender                                   -0.26
## Dependent_count                          -0.04
## Education_Level                           0.01
## Marital_Status                           -0.03
## Income_Category                           0.12
## Card_Category                            -0.21
## Months_on_book                           -0.01
## Total_Relationship_Count                  0.07
## Months_Inactive_12_mon                   -0.01
## Contacts_Count_12_mon                    -0.06
## Credit_Limit                             -0.48
## Total_Revolving_Bal                       0.62
## Avg_Open_To_Buy                          -0.54
## Total_Amt_Chng_Q4_Q1                      0.04
## Total_Trans_Amt                          -0.08
## Total_Trans_Ct                            0.00
## Total_Ct_Chng_Q4_Q1                       0.07
## Avg_Utilization_Ratio                     1.00
library(corrplot)
corrplot(cor_clients_database1, method = "color",tl.cex = 0.7)

Кластеризация

Определение кол-ва кластеров (K Means Clustering)

library(factoextra)
library(cluster)
clients_database_scaled <-scale(clients_database1)
fviz_nbclust(clients_database_scaled ,FUNcluster = kmeans,method = "silhouette") +
  ggtitle("Оптимальное кол-во кластеров") +
  xlab("Количество кластеров (k)") +
  ylab("Cредняя ширина силуэта")

Кластеризация

set.seed(123)
kmeans_result <- kmeans(clients_database_scaled, centers = 2)
clients_database1$cluster <- kmeans_result$cluster
fviz_cluster(kmeans_result, data = clients_database_scaled, repel = FALSE, geom = "point", show.clust.cent = TRUE, 
             ellipse.type = "convex", ggtheme = theme_minimal(),
             main = "Factor map") +
  ggtitle("График кластеров")+
  theme(plot.title = element_text (hjust = 0.5 ))

Профилирование кластеров

profiles <- clients_database1 %>%
  group_by(cluster) %>%
  summarise(
    AvgCustomerAge = mean(Customer_Age, na.rm = TRUE),
    AvgDependentcount = mean(Dependent_count, na.rm = TRUE),
    AvgMonthsonbook = mean(Months_on_book, na.rm = TRUE),
    AvgTotalRelationshipCount = mean(Total_Relationship_Count, na.rm = TRUE),
    AvgMonthsInactive12mon = mean(Months_Inactive_12_mon, na.rm = TRUE),
    AvgContactsCount12mon = mean(Contacts_Count_12_mon, na.rm = TRUE),
    AvgCreditLimit = mean(Credit_Limit, na.rm = TRUE),
    AvgTotalRevolvingBal = mean(Total_Revolving_Bal, na.rm = TRUE),
    AvgTotalAmtChngQ4Q1 = mean(Total_Amt_Chng_Q4_Q1, na.rm = TRUE),
    AvgTotalTransAmt = mean(Total_Trans_Amt, na.rm = TRUE),
    AvgTotalTransCt = mean(Total_Trans_Ct, na.rm = TRUE),
    AvgTotalCtChngQ4Q1 = mean(Total_Ct_Chng_Q4_Q1, na.rm = TRUE),
    AvgAvgUtilizationRatio = mean(Avg_Utilization_Ratio, na.rm = TRUE)
  )
print(profiles)
## # A tibble: 2 × 14
##   cluster AvgCustomerAge AvgDependentcount AvgMonthsonbook
##     <int>          <dbl>             <dbl>           <dbl>
## 1       1           46.2              2.49            35.9
## 2       2           46.4              2.31            35.9
## # ℹ 10 more variables: AvgTotalRelationshipCount <dbl>,
## #   AvgMonthsInactive12mon <dbl>, AvgContactsCount12mon <dbl>,
## #   AvgCreditLimit <dbl>, AvgTotalRevolvingBal <dbl>,
## #   AvgTotalAmtChngQ4Q1 <dbl>, AvgTotalTransAmt <dbl>, AvgTotalTransCt <dbl>,
## #   AvgTotalCtChngQ4Q1 <dbl>, AvgAvgUtilizationRatio <dbl>

Визуализация перемнных для каждого кластера

ai1 <-ggplot(clients_database1, aes(x = Customer_Age, fill = as.factor(cluster))) +
  geom_histogram(position = "identity", alpha = 0.5, bins = 30) +
  scale_fill_manual(values = c("red", "lightblue")) +
  ggtitle("Распределение возраста клиентов по кластерам") +
  xlab("Возраст клиента") +
  ylab("Кол-во") +
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ai2 <-ggplot(clients_database1, aes(x = Avg_Open_To_Buy, fill = as.factor(cluster))) +
  geom_histogram(position = "identity", alpha = 0.5, bins = 30) +
  scale_fill_manual(values = c("red", "lightblue")) +
  ggtitle("Распределение доступности денег к покупкам по кластерам") +
  xlab("Деньги к покупке") +
  ylab("Кол-во") +
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ai3 <-ggplot(clients_database1, aes(x = Credit_Limit, fill = as.factor(cluster))) +
  geom_histogram(position = "identity", alpha = 0.5, bins = 30) +
  scale_fill_manual(values = c("red", "lightblue")) +
  ggtitle("Распределение кредитного лимита клиентов банка по кластерам") +
  xlab("Кредитный лимит клиента") +
  ylab("Кол-во") +
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ai4 <-ggplot(clients_database1, aes(x = Total_Revolving_Bal, fill = as.factor(cluster))) +
  geom_histogram(position = "identity", alpha = 0.5, bins = 30) +
  scale_fill_manual(values = c("red", "lightblue")) +
  ggtitle("Распределение сумм невыплченных кредитов") +
  xlab("Невыплаченные кредиты") +
  ylab("Кол-во") +
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
grid.arrange(ai1, ai2, ai3, ai4, ncol=2)

Линейная регрессия для каждого кластера

models <- list()
summaries <- list()
for (i in unique(clients_database1$cluster)){
  cluster_data <- clients_database1[clients_database1$cluster == i, ]
  model <- lm(Credit_Limit ~ Avg_Open_To_Buy + Avg_Utilization_Ratio, 
              data = cluster_data)
  models[[i]] <- model
  summaries[[i]] <- summary(model)
}
models
## [[1]]
## 
## Call:
## lm(formula = Credit_Limit ~ Avg_Open_To_Buy + Avg_Utilization_Ratio, 
##     data = cluster_data)
## 
## Coefficients:
##           (Intercept)        Avg_Open_To_Buy  Avg_Utilization_Ratio  
##              -773.196                  1.044              16859.643  
## 
## 
## [[2]]
## 
## Call:
## lm(formula = Credit_Limit ~ Avg_Open_To_Buy + Avg_Utilization_Ratio, 
##     data = cluster_data)
## 
## Coefficients:
##           (Intercept)        Avg_Open_To_Buy  Avg_Utilization_Ratio  
##              -199.485                  1.112               2914.442
summaries
## [[1]]
## 
## Call:
## lm(formula = Credit_Limit ~ Avg_Open_To_Buy + Avg_Utilization_Ratio, 
##     data = cluster_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4512.1  -159.8    65.2   218.4   668.2 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -7.732e+02  3.137e+01  -24.65   <2e-16 ***
## Avg_Open_To_Buy        1.044e+00  1.075e-03  971.65   <2e-16 ***
## Avg_Utilization_Ratio  1.686e+04  1.865e+02   90.39   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 368.3 on 2132 degrees of freedom
## Multiple R-squared:  0.9981, Adjusted R-squared:  0.9981 
## F-statistic: 5.576e+05 on 2 and 2132 DF,  p-value: < 2.2e-16
## 
## 
## [[2]]
## 
## Call:
## lm(formula = Credit_Limit ~ Avg_Open_To_Buy + Avg_Utilization_Ratio, 
##     data = cluster_data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2128.35  -283.20     1.57   278.39  1185.80 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -1.995e+02  1.397e+01  -14.28   <2e-16 ***
## Avg_Open_To_Buy        1.112e+00  1.951e-03  570.17   <2e-16 ***
## Avg_Utilization_Ratio  2.914e+03  2.304e+01  126.47   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 466.6 on 7989 degrees of freedom
## Multiple R-squared:  0.9802, Adjusted R-squared:  0.9802 
## F-statistic: 1.977e+05 on 2 and 7989 DF,  p-value: < 2.2e-16
library(car)
library(lmtest)
vif(models[[1]])
##       Avg_Open_To_Buy Avg_Utilization_Ratio 
##              1.281879              1.281879
vif(models[[2]])
##       Avg_Open_To_Buy Avg_Utilization_Ratio 
##              1.549314              1.549314
resettest(formula = Credit_Limit ~ Avg_Open_To_Buy + Avg_Utilization_Ratio, data = cluster_data, power = 3, type = "fitted")
## 
##  RESET test
## 
## data:  Credit_Limit ~ Avg_Open_To_Buy + Avg_Utilization_Ratio
## RESET = 9.5543, df1 = 1, df2 = 2131, p-value = 0.002021

Визуализация

Одиночные категориальные факторы

library(gridExtra)
clients_database.2 <- read_csv("C:\\Users\\Админ\\Downloads\\clientum.csv")
clients_database2 = subset(clients_database.2, select = - c(...1)) 
gga<-ggplot(clients_database2, aes(x = Attrition_Flag)) + 
  geom_bar(color="black",fill = "lightblue") +
  ggtitle("Актуальные/ушедшие клиенты")+
  labs(x = "Актуальный статус", 
       y = "Кол-во")+
  theme(plot.title = element_text (hjust = 0.5 ))
ggb<-ggplot(clients_database2, aes(x = Gender)) + 
  geom_bar(color="black",fill = "lightblue") +
  ggtitle("Пол клиентов")+
  labs(x = "Пол", 
       y = "Кол-во")+
  theme(plot.title = element_text (hjust = 0.5 ))
ggc<-ggplot(clients_database2, aes(x = Education_Level)) + 
  geom_bar(color="black",fill = "lightblue") +
  ggtitle("Уровень образования клиентов")+
  labs(x = "Уровень образования", 
       y = "Кол-во")+
  theme(plot.title = element_text (hjust = 0.5 ))+ 
  theme(axis.text = element_text(size = 5))
ggd<-ggplot(clients_database2, aes(x = Income_Category)) + 
  geom_bar(color="black",fill = "lightblue") +
  ggtitle("Уровень дохода клиентов")+
  labs(x = "Уровень дохода", 
       y = "Кол-во")+
  theme(plot.title = element_text (hjust = 0.5 ))+ 
  theme(axis.text = element_text(size = 5))
ggf<-ggplot(clients_database2, aes(x = Marital_Status)) + 
  geom_bar(color="black",fill = "lightblue") +
  ggtitle("Брачный статус клиентов")+
  labs(x = "Брачный статус", 
       y = "Кол-во")+
  theme(plot.title = element_text (hjust = 0.5 ))
ggg<-ggplot(clients_database2, aes(x = Card_Category)) + 
  geom_bar(color="black",fill = "lightblue") +
  ggtitle("Категория карты клиентов")+
  labs(x = "Категория карты", 
       y = "Кол-во")+
  theme(plot.title = element_text (hjust = 0.5 ))
grid.arrange(gga, ggb, ggc, ggd, ggf, ggg, ncol=2)

table(clients_database2$Attrition_Flag) 
## 
## Attrited Customer Existing Customer 
##              1627              8500
table(clients_database2$Gender)
## 
##    F    M 
## 5358 4769
table(clients_database2$Education_Level)
## 
##       College     Doctorate      Graduate   High School Post-Graduate 
##          1013           451          3128          2013           516 
##    Uneducated       Unknown 
##          1487          1519
table(clients_database2$Income_Category)
## 
##        $120K +    $40K - $60K    $60K - $80K   $80K - $120K Less than $40K 
##            727           1790           1402           1535           3561 
##        Unknown 
##           1112
table(clients_database2$Marital_Status)
## 
## Divorced  Married   Single  Unknown 
##      748     4687     3943      749
table(clients_database2$Card_Category)
## 
##     Blue     Gold Platinum   Silver 
##     9436      116       20      555

Совместные категориальные факторы

ggh <-ggplot(data = clients_database2, 
           aes(x = Attrition_Flag, 
               fill = Gender)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Текущий статус клиента", 
       y = "Кол-во", title = "Текущий статус обслуживания относительно пола")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ggi <- ggplot(data = clients_database2, 
           aes(x = Education_Level, 
               fill = Gender)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Образование", 
       y = "Кол-во", title = "Уровень образования клиентов относительно пола")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ggj <- ggplot(data = clients_database2, 
           aes(x = Customer_Age, 
               fill = Gender)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Возраст", 
       y = "Кол-во", title = "Возраст клиента относительно пола")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ggk <-ggplot(data = clients_database2, 
           aes(x = Marital_Status, 
               fill = Gender)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Брачный статус", 
       y = "Кол-во", title = "Брачный статус клиентов относительно пола")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ggl <-ggplot(data = clients_database2, 
           aes(x = Income_Category, 
               fill = Gender)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Доход", 
       y = "Кол-во", title = "Доходы клиентов относительно пола")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
ggm <-ggplot(data = clients_database2, 
           aes(x = Card_Category, 
               fill = Gender)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Вид карты", 
       y = "Кол-во", title = "Вид карты относительно пола")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 5)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 5),
        axis.title.y = element_text(size = 5))
grid.arrange(ggh, ggi, ggj, ggk, ggl, ggm, ncol = 2)

clients_database2%>%filter(Gender=="F")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   930
## 2 Existing Customer  4428
clients_database2%>%filter(Gender=="M")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   697
## 2 Existing Customer  4072
clients_database2%>%filter(Gender=="F")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College           532
## 2 Doctorate         257
## 3 Graduate         1670
## 4 High School      1028
## 5 Post-Graduate     263
## 6 Uneducated        796
## 7 Unknown           812
clients_database2%>%filter(Gender=="M")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College           481
## 2 Doctorate         194
## 3 Graduate         1458
## 4 High School       985
## 5 Post-Graduate     253
## 6 Uneducated        691
## 7 Unknown           707
clients_database2%>%filter(Gender=="F")%>%count(Customer_Age)
## # A tibble: 42 × 2
##    Customer_Age     n
##           <dbl> <int>
##  1           26    39
##  2           27    19
##  3           28    13
##  4           29    22
##  5           30    33
##  6           31    45
##  7           32    45
##  8           33    72
##  9           34    78
## 10           35   105
## # ℹ 32 more rows
clients_database2%>%filter(Gender=="F")%>%count(mean(Customer_Age))
## # A tibble: 1 × 2
##   `mean(Customer_Age)`     n
##                  <dbl> <int>
## 1                 46.5  5358
clients_database2%>%filter(Gender=="M")%>%count(Customer_Age)
## # A tibble: 44 × 2
##    Customer_Age     n
##           <dbl> <int>
##  1           26    39
##  2           27    13
##  3           28    16
##  4           29    34
##  5           30    37
##  6           31    46
##  7           32    61
##  8           33    55
##  9           34    68
## 10           35    79
## # ℹ 34 more rows
clients_database2%>%filter(Gender=="M")%>%count(mean(Customer_Age))
## # A tibble: 1 × 2
##   `mean(Customer_Age)`     n
##                  <dbl> <int>
## 1                 46.2  4769
clients_database2%>%filter(Gender=="F")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced         402
## 2 Married         2451
## 3 Single          2125
## 4 Unknown          380
clients_database2%>%filter(Gender=="M")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced         346
## 2 Married         2236
## 3 Single          1818
## 4 Unknown          369
clients_database2%>%filter(Gender=="F")%>%count(Income_Category)
## # A tibble: 3 × 2
##   Income_Category     n
##   <chr>           <int>
## 1 $40K - $60K      1014
## 2 Less than $40K   3284
## 3 Unknown          1060
clients_database2%>%filter(Gender=="M")%>%count(Income_Category)
## # A tibble: 6 × 2
##   Income_Category     n
##   <chr>           <int>
## 1 $120K +           727
## 2 $40K - $60K       776
## 3 $60K - $80K      1402
## 4 $80K - $120K     1535
## 5 Less than $40K    277
## 6 Unknown            52
clients_database2%>%filter(Gender=="F")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue           5101
## 2 Gold             38
## 3 Platinum          9
## 4 Silver          210
clients_database2%>%filter(Gender=="M")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue           4335
## 2 Gold             78
## 3 Platinum         11
## 4 Silver          345
ggn <-ggplot(data = clients_database2, 
           aes(x = Attrition_Flag, 
               fill = Income_Category)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Текущий статус клиента", 
       y = "Кол-во", title = "Текущий статус обслуживания относительно уровня дохода") +
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 6)) +
  theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
  theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
ggp <- ggplot(data = clients_database2, 
           aes(x = Education_Level, 
               fill = Income_Category)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Образование", 
       y = "Кол-во", title = "Уровень образования клиентов относительно уровня дохода")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 6)) +
  theme(axis.text.x= element_text(size =3),
        axis.text.y= element_text(size =3)) +
  theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
ggq <-ggplot(data = clients_database2, 
           aes(x = Marital_Status, 
               fill = Income_Category)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Брачный статус", 
       y = "Кол-во", title = "Брачный статус клиентов относительно уровня дохода")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 6)) +
  theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
  theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
ggr <-ggplot(data = clients_database2, 
           aes(x = Card_Category, 
               fill = Income_Category)) + 
  geom_bar(position = position_dodge(preserve = "single"))+
  labs(x = "Вид карты", 
       y = "Кол-во", title = "Вид карты относительно уровня дохода")+
  theme(plot.title = element_text (hjust = 0.5 )) +
  theme(plot.title = element_text(size = 6)) +
  theme(axis.text.x= element_text(size =5),
        axis.text.y= element_text(size =5)) +
  theme(axis.title.x = element_text(size = 6),
        axis.title.y = element_text(size = 6))
grid.arrange(ggn, ggp, ggq, ggr, ncol = 2)

clients_database2%>%filter(Income_Category=="Less than $40K")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   612
## 2 Existing Customer  2949
clients_database2%>%filter(Income_Category=="$40K - $60K")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   271
## 2 Existing Customer  1519
clients_database2%>%filter(Income_Category=="$60K - $80K")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   189
## 2 Existing Customer  1213
clients_database2%>%filter(Income_Category=="$80K - $120K")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   242
## 2 Existing Customer  1293
clients_database2%>%filter(Income_Category=="$120K +")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   126
## 2 Existing Customer   601
clients_database2%>%filter(Income_Category=="Unknown")%>%count(Attrition_Flag)
## # A tibble: 2 × 2
##   Attrition_Flag        n
##   <chr>             <int>
## 1 Attrited Customer   187
## 2 Existing Customer   925
clients_database2%>%filter(Income_Category=="Less than $40K")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College           345
## 2 Doctorate         158
## 3 Graduate         1139
## 4 High School       671
## 5 Post-Graduate     170
## 6 Uneducated        522
## 7 Unknown           556
clients_database2%>%filter(Income_Category=="$40K - $60K")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College           183
## 2 Doctorate          70
## 3 Graduate          553
## 4 High School       355
## 5 Post-Graduate     111
## 6 Uneducated        249
## 7 Unknown           269
clients_database2%>%filter(Income_Category=="$60K - $80K")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College           132
## 2 Doctorate          59
## 3 Graduate          422
## 4 High School       307
## 5 Post-Graduate      77
## 6 Uneducated        195
## 7 Unknown           210
clients_database2%>%filter(Income_Category=="$80K - $120K")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College           175
## 2 Doctorate          57
## 3 Graduate          478
## 4 High School       308
## 5 Post-Graduate      81
## 6 Uneducated        217
## 7 Unknown           219
clients_database2%>%filter(Income_Category=="$120K +")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College            70
## 2 Doctorate          37
## 3 Graduate          204
## 4 High School       147
## 5 Post-Graduate      30
## 6 Uneducated        119
## 7 Unknown           120
clients_database2%>%filter(Income_Category=="Unknown")%>%count(Education_Level)
## # A tibble: 7 × 2
##   Education_Level     n
##   <chr>           <int>
## 1 College           108
## 2 Doctorate          70
## 3 Graduate          332
## 4 High School       225
## 5 Post-Graduate      47
## 6 Uneducated        185
## 7 Unknown           145
clients_database2%>%filter(Income_Category=="Less than $40K")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced         254
## 2 Married         1628
## 3 Single          1429
## 4 Unknown          250
clients_database2%>%filter(Income_Category=="$40K - $60K")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced         138
## 2 Married          816
## 3 Single           704
## 4 Unknown          132
clients_database2%>%filter(Income_Category=="$60K - $80K")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced         108
## 2 Married          661
## 3 Single           531
## 4 Unknown          102
clients_database2%>%filter(Income_Category=="$80K - $120K")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced         103
## 2 Married          735
## 3 Single           561
## 4 Unknown          136
clients_database2%>%filter(Income_Category=="$120K +")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced          52
## 2 Married          354
## 3 Single           274
## 4 Unknown           47
clients_database2%>%filter(Income_Category=="Unknown")%>%count(Marital_Status)
## # A tibble: 4 × 2
##   Marital_Status     n
##   <chr>          <int>
## 1 Divorced          93
## 2 Married          493
## 3 Single           444
## 4 Unknown           82
clients_database2%>%filter(Income_Category=="Less than $40K")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue           3403
## 2 Gold             24
## 3 Platinum          4
## 4 Silver          130
clients_database2%>%filter(Income_Category=="$40K - $60K")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue           1675
## 2 Gold             15
## 3 Platinum          1
## 4 Silver           99
clients_database2%>%filter(Income_Category=="$60K - $80K")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue           1273
## 2 Gold             29
## 3 Platinum          4
## 4 Silver           96
clients_database2%>%filter(Income_Category=="$80K - $120K")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue           1395
## 2 Gold             21
## 3 Platinum          2
## 4 Silver          117
clients_database2%>%filter(Income_Category=="$120K +")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue            645
## 2 Gold             18
## 3 Platinum          4
## 4 Silver           60
clients_database2%>%filter(Income_Category=="Unknown")%>%count(Card_Category)
## # A tibble: 4 × 2
##   Card_Category     n
##   <chr>         <int>
## 1 Blue           1045
## 2 Gold              9
## 3 Platinum          5
## 4 Silver           53

Выводы

Таким образом, можно сделать определенные выводы по каждому из пунктов проделанной работы:

  1. Анализ данных

1.1 Структура матрицы с данными состоит из 21 переменной, 10127 наблюдений. 6 переменных- числовые, остальные 15- категориальные. Категориальные данные для дальнейшего удобства анализа была преобразованы в числовые.

1.1 В данных отсутствовали какие-либо пропущенные значения переменных (NA), а также повторяющиеся наблюдения.

1.2 Были проанализированы выбросы в переменных датасета. Так, с помощью боксплотов можно заметить различные результаты. В некоторых переменных, таких как: “Credit_Limit”, “Avg_Open_To_Buy”, “Total_Trans_Amt”, “Total_Ct_Chng_Q4_Q1”, можно обнаружить большое количество выбросов, что выглядит как плотная линия, состоящая из множества точек-выбросов. В другие же, как “Customer_Age” и “Total_Trans_Ct” обнаруживается меньшее количество выбросов, изображенных в виде точек. И наконец, присутствуют переменные без выбросов, как “Total_Revolving_Bal” и “Avg_Utilization_Ratio”.

  1. Описательная статистика

2.1 В данном пункте была использована описательная статистика для всех переменных. Так были рассмотрены: количество наблюдений, среднее, усеченное среднее, среднеквадратично отклонение, среднее абсолютное отклонение, медиана, min и max, стандартная ошибка, размах, ассиметрия и эксцесс.

  1. Анализ распределения данных

3.1 Были построены и рассмотрены гистограммы некоторых наблюдений. На гистограммах, приведенных выше, можно заметить абсолютно разные распределения. Так, например,“Total_Ct_Chng_Q4_Q1”, предположительно, соответствует нормальному распределению. Гистограмма “Customer_Age” также напоминает вид нормального распределения, но тем же временем имеет некоторые сходства с гребенчатым. “Credit_Limit”, возможно, можно отнести к усеченному виду распределения, в то время как гистограмма “Avg_Open_To_Buy”, похожая на “Credit_Limit”, скорее всего, относится к усеченному распределению. Остальные гистограммы можно отнести к распределению типа плато, с пиком на краю и т.д.

3.2 Также, для проверки на нормальность распределения данных, были построены графики типа QQ-plot. Так, наложив линию тренда нормального распределения, можно заметить, что абсолютно все точки наблюдений, предположительно, не соответствуют нормальному распределению. Отдаленно, нормальное распределение напоминает переменная “Customer_Age”, хотя на хвостах по обе сторны имеются отелонения от прямой линии. Аналогично и “Total_Ct_Chng_Q4_Q1”: с самого начала наблюдения соответствуют нормальному распределению, а в хвосте- очевидное отклонение. Остальные же переменные абсолютно не соответствуют нормальному распределению.

3.3 И, наконец, мы провели тест Калмогорова-Смирнова, где H0 соответствует нормальному распределению, H1- ненормальному. По данным теста, в котором p-value всех переменных < 0.05, то можно сделать вывод, что все данные не сооветствуют нормальному распределению.

  1. Определение тесноты связи между переменными.

4.1 На основе корреляционного теста и построенной выше корреляционной матрицы можно проследить степень взаимосвязи или же тесноты между всеми переменными. Вместо категориальных переменных были использованы их числовые значения, которые начинаются с 0. Альтернативой может быть замена категориальных переменных на dummies (фиктивные переменные). Так, рассмотрев визуальный вариант в виде матрицы,значения на главной диагонали который равны 1. Можно увидеть следующее:

   1) Между "Credit_Limit" и "Avg_Open_To_Buy" присутствует высокая степень 
   положительной корреляции (связь между кредитным лимитом и средней суммы 
   денег для покупок) и равня 1. 
   
   2) Высокая степень положительной взаимосвязи, равная 0.81, сущетсвует 
   между "Total_Trans_Amt" и "Total_Trans_Ct" (Сумма транзакций за 12 мес. 
   и общая сумма транзакций).
   
   3) Присутсвует нормальная положительная взаимосвязь 
   "Avg_Utilization_Ratio" (Среднее использование карты (потраченные/
   доступные деньги)) и "Total_Revolving_Bal" (Невыплаченная сумма  кредита)
   (0,62) и нормальная отрицательная взаимосвязь "Avg_Utilization_Ratio" и
   "Avg_Open_To_Buy" (средняя сумма денег для покупок) (-0.54).
   
   4) Также можно отметить нормальную отрицательную связь между полом 
   клиента и категорией дохода ("Gender" и "Income_Category"),  равную -0.54 
   и относительно высокую положительную связь между периодом обслуживания 
   клиентов и возрастом клиентов ("Months_On_Book" и "Customer_Age), равную 
   0.79.
  
   5) Все остальные степени связи между переменными слабо значимы либо же - 
   вообще незначимы.
   
  1. Кластеризация

5.1 В данном анализе была проведена кластеризация и выделены группы наблюдений переменных с похожими чертами. Для начала нужно провести масштабирование (scale), чтобы все переменные имели среднее значение 0 и стандартное отклонение 1 для последующего применения K-means clustering. Затем проводится определение оптимального количества класетров. В научной литературе существует несколько способов сделать это. Самые известные: метод “локтя” и метод “силуэта”. Также данные методы являются очень популярными в среде “R”. Так, было определено оптимального количества посредством именно метода “силуэта”. На графике, приведенном выше, можно заметить, что оптимальное количество равно двум.

5.2 На данном этапе была проведена, непосредственно, сама кластеризация методом k-средних (k-means), который является наиболее популярных методов. Так, на графике кластеров можно заметить 2 кластера, синий и красный, внутри которых находится большое количество значений и наблюдений. Также есть место пересечения кластеров, значения в котором являются общими для обоих кластеров, т.е. имеется взаимосвязь наблюдений переменных между двумя группами.

5.3 Затем было проведено профилирование кластером, чтобы определить по какому все-таки принципу совокупность значений переменных была разделена на 2 данные группы. Так, были расчитаны средние по двум кластерам, и на основе этого, можно предположить, что они были разделены по “Credit_Limit”, т.е. кредитным лимитам, т.к. между средними двух кластеров по данной переменной наблюдается наибольшее различие: 23488.303 и 4663.197.

5.4 На графиках распределения значений перемнных для каждого кластера, можно заметить, что значения
некоторых переменных обоих кластеров, к примеру, возраста клиентов и сумм невыплаченных кредитов полностью совпадают (значения кластера 1 находится внутри значений кластера 2). В то же время, значения доступных денег к покупкам и кредитных лимитов (предположительно по ним произошло деление по кластерам) лишь частично пересекаются и имеют общее распределение.

5.5 Также на основе данных кластеров, можно построить модель регрессии, например линейной. Но т.к. в данном анализе нет цели ее проведения, например, для прогнозирования регрессантов, были построены пробные модели, которые служат лишь примером. Так, были взяты следующие переменные: зависимые из 1 и 2 кластеров - “Credit_Limit”, независимые- “Avg_Open_To_Buy”, “Avg_Utilization_Ratio”, “Customer_Age”. Также в моделе можно использовать и категориальные переменные, преобразовав их в dummy. Данные переменные были взяты по причине высокой степени взаимосвязи регрессоров с регрессантом. p-value коэффициентов переменных < 0.05, что означает, что переменные статистически значимы. Аналогична и F-statistica, p-value которой меньше 0.05, что означает, что уравнение, в целом, значимо.
Множественные коэффициенты детерминации близки к 1, что присутствует сильная линейная зависимость. Значения коэффициентов VIF находятся близко 1, и, скорее всего, мультиколлинеарность отстутствует между регрессорами. Несмотря на высокий коэффициент множественной детерминации, RESET-тест с p-value < 0.05 показывает, что спецификация модели является неправильной. Таким образом, изменив спецификацию данной модели или использовав другие переменные, можно найти оценки прогнозных значений регрессанта.

  1. Интерпретация данных посредством визуализации данных

6.1 Так, расмотрев графики одиночных категориальных переменных, можно сделать следующие выводы:

   1) На первом графике заметно, что большинство клиентов являются 
   актуальными клиентами, которых в данный обслуживает банк, таковых -
   8500. Ушедших - 1627.
   
   2) Относительно пола, клиенты мужского и женского - практически равны,
   тем не менее, клиенты жеского пола превалируют над мужчинами. Так, всего 
   в банке за все время обслуживалось 5358 женщин и 4769 мужчин.
   
   3) По уровню образования доминирует группа- "выпускники" (3128). Затем 
   идут те, кто закончил среднюю школу (2013). Необразованные и клиенты c
   неопределенным уровнем обраования практически равны (1487 и 1519).
   Наименьшее число клиентов- со степенями докторов наук. Таковых - всего 
   лишь 451 клиент.
   
   4) Большинство клиентов получает годовой уровень дохода ниже чем $40 тыс.
   (3561 клиент). За ними по убыванию следуют клиенты, получающие $40-60 
   тыс. Таковых- 1790. Клиенты, получающие $60-80 тыс. и $80-120 тыс. 
   практически равны (1402 и 1535). И меньше всего клиентов с доходом
   $120 тыс. (727 человек).
   
   5) Клиентов, находящихся в браке, за все время было больше других групп 
   (4687). Меньше всего лиентов, которые разведены (748), правда, их на 1 
   человека меньше, чем клиентов с неизвестным статусом брака.
   
   6) Большинство клиентов банка, которые когда-либо обслуживавшиеся в нем,
   были держателями  обычных синих карт. Таковых- 9436 человек. И наименьшая
   группа- владельцы платиновых карт - 20 человек.
   

6.2 Также стоит рассмотреть графики с совместными категориальными переменными. Так прослеживаются следующие тенденции:

   1) Как видно на первом графике (текущий статус обслуживания относительно
   пола), количество женщин и мужчин среди ушедших и актуальных клиентов
   приблизительно равно. Ушедшие клиенты: 930(Ж) и 697(М); актуальные
   клиенты: 4428 (Ж) и 4072 (М)
   
   2) Женщины и мужчины имеют практически одинаковый уровень
   образования. Колледж: 532(Ж) и 481(М); Докторская степень: 257(Ж) и 
   194(М); бакалавры: 1670(Ж) и 1458(М); старшая школа: 1028(Ж) и 985(М);
   кандидаты аук: 263(Ж) и 253(М); необразованные: 796(Ж) и 691(М);
   неизвестно:  812(Ж) и 707(М). Тем не менее, женщины лидируют ввиду того,
   что кол-во клиентов женского пола больше, чем мужского (5358 женщин и
   4769 мужчин).
   
   3) Относительно возраста, клиенты мужского и женского пола также 
   практически равны друг с другом. Так, самый распространенный возраст
   среди клиентов-женщин - 44 года (277 человек), среди клиентов-мужчин -
   46   лет (249 человек). Средний возраст женщин - 46.5; мужчин - 46.2.
   
   4) Брачный статус и категории кредитных карт, используемых обеими 
   группами соответствует тенденции прошлых выводов. Так, самая 
   распространенная категория по статусу брака - "женат(а): 2451(Ж) и 
   2236(М);самая малочисленная категория у женской группы - "неизвестный
   статус" - 380 человек; у мужчин - "разведены" - 346 человек. Относительно
   категорий кредитных карт: самая многочисленная категория "синия" -
   5101(Ж) и 4335(М); самая малочисленная категория "платиновая" - 9(Ж) и 
   11(М).
   
   5) Главные отличия можно увидеть на 5 графике. Так, в женской группе
   полностью отстуствуют клиенты, получающие "$60K - $80K", "$80K - $120K"
   и "$120K +". Самая многочисленная категория в данной группе - 
   "Less than $40K" - 3284 человека. Число людей из группы, подпадающих
   под категории "$40K - $60K" и "Unknown" - практически одинаково (1014 и
   1060 - соответственно). Мужская же группа, подпадает под все категории.
   Самая многочисленная - "$80K - $120K" (1535 человек); самая 
   малочисленная - "Unknown" (52 человека).
   
   6) Во 2 таблице графиков, сгруппированной по уровню доходов, можно 
   заметить, что клиенты со степенями докторов наук и кандидатов имеют 
   самый низкий показатель в категории доходов в абсолютных показателях 
   "ниже $40 тыс." (158 и 170 человек - соответственно). Самая 
   многочисленная группа, имеющая доход "$120K +" в абсолютных показателях - 
   бакалавры (204).
   
   7) Касаемо статуса брака и уровня доходов, нужно отметить, что 
   большинство клиентов, состоящие во всех категориях брака имеют доход -
   "Less than $40K": 254 - в разводе, 1628 - в браке, 1429 - холосты и 
   250 - со статусом "неизвестно". Наименьшее число клиентов по всем
   категориям брака получают "$120K +": 52 - в разводе, 354 - в браке, 
   274 - холосты и 47 - со статусом "неизвестно".
   
   8) На последнем графике едва ли существует между уровнем доходов 
   клиентов и категориями кредитных карт. Так, 4 платиновые карты имеют
   группы "$120K +", "$60K - $80K", "Less than $40K", 1 платиновая карта - 
   в группе "$40K - $60K", 2 - в "$80K - $120K" и 5 - в "Unknown".  
   Аналонгичная тенденция прослеживается с серебрянными и золотыми картами.