This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.
install.packages("readxl")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:
https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/sgp13/AppData/Local/R/win-library/4.4’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.4/readxl_1.4.5.zip'
Content type 'application/zip' length 750468 bytes (732 KB)
downloaded 732 KB
package ‘readxl’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\sgp13\AppData\Local\Temp\RtmpGOw5Qj\downloaded_packages
library(readxl)
Warning: package ‘readxl’ was built under R version 4.4.3
df <- read.csv("loanapp.csv")
df
str(df)
'data.frame': 1988 obs. of 17 variables:
$ married : logi TRUE FALSE TRUE TRUE FALSE FALSE ...
$ race : chr "white" "white" "white" "white" ...
$ loan_decision : chr "reject" "approve" "approve" "approve" ...
$ occupancy : int 1 1 1 1 1 1 1 1 1 1 ...
$ loan_amount : int 128 128 66 120 111 141 276 100 267 175 ...
$ applicant_income : int 74 84 36 59 63 72 90 72 144 97 ...
$ num_units : int 1 1 1 1 1 1 1 1 1 1 ...
$ num_dependants : int 1 0 0 0 0 0 0 1 2 0 ...
$ self_employed : logi FALSE FALSE TRUE FALSE FALSE FALSE ...
$ monthly_income : int 4583 2666 3000 2583 2208 6000 7500 3234 5417 6292 ...
$ purchase_price : num 160 143 110 134 138 ...
$ liquid_assets : num 52 37 19 31 169 ...
$ mortage_payment_history: int 2 2 2 2 2 2 2 2 1 1 ...
$ consumer_credit_history: int 2 2 6 1 6 1 1 1 1 2 ...
$ filed_bankruptcy : logi FALSE FALSE TRUE FALSE FALSE FALSE ...
$ property_type : int 2 2 2 1 2 1 2 2 2 2 ...
$ gender : chr "male" "male" "male" "male" ...
summary(df)
married race loan_decision occupancy loan_amount applicant_income num_units
Mode :logical Length:1988 Length:1988 Min. :1.000 Min. : 2.0 Min. : 0.00 Min. :1.000
FALSE:677 Class :character Class :character 1st Qu.:1.000 1st Qu.:100.0 1st Qu.: 48.00 1st Qu.:1.000
TRUE :1308 Mode :character Mode :character Median :1.000 Median :126.0 Median : 64.00 Median :1.000
NA's :3 Mean :1.032 Mean :143.3 Mean : 84.68 Mean :1.122
3rd Qu.:1.000 3rd Qu.:165.0 3rd Qu.: 88.00 3rd Qu.:1.000
Max. :3.000 Max. :980.0 Max. :972.00 Max. :4.000
NA's :4
num_dependants self_employed monthly_income purchase_price liquid_assets mortage_payment_history
Min. :0.0000 Mode :logical Min. : 0 Min. : 25.0 Min. : 0 Min. :1.000
1st Qu.:0.0000 FALSE:1731 1st Qu.: 2876 1st Qu.: 129.0 1st Qu.: 20 1st Qu.:1.000
Median :0.0000 TRUE :257 Median : 3812 Median : 163.0 Median : 38 Median :2.000
Mean :0.7713 Mean : 5195 Mean : 196.3 Mean : 4620 Mean :1.708
3rd Qu.:1.0000 3rd Qu.: 5594 3rd Qu.: 225.0 3rd Qu.: 83 3rd Qu.:2.000
Max. :8.0000 Max. :81000 Max. :1535.0 Max. :1000000 Max. :4.000
NA's :3
consumer_credit_history filed_bankruptcy property_type gender
Min. :1.00 Mode :logical Min. :1.000 Length:1988
1st Qu.:1.00 FALSE:1851 1st Qu.:2.000 Class :character
Median :1.00 TRUE :137 Median :2.000 Mode :character
Mean :2.11 Mean :1.861
3rd Qu.:2.00 3rd Qu.:2.000
Max. :6.00 Max. :3.000
The data set is very large with 1988 individuals included. The summary shows that the continuous monetary variables have a huge range and the housing properties have less of a range. The huge ranges affect the mean in many variables such as liquid assets where the median £38,000 is much less than the mean £4,620,000. The large data set is affected by a few outliers with very large incomes and assets. Most of the categorical variables have similar means and medians because they cannot be affected by large outliers.
df2 <- df[complete.cases(df), ]
df2
summary(df2)
married race loan_decision occupancy loan_amount applicant_income num_units
Mode :logical Length:1983 Length:1983 Min. :1.000 Min. : 2.0 Min. : 0.00 Min. :1.000
FALSE:677 Class :character Class :character 1st Qu.:1.000 1st Qu.:100.0 1st Qu.: 48.00 1st Qu.:1.000
TRUE :1306 Mode :character Mode :character Median :1.000 Median :126.0 Median : 64.00 Median :1.000
Mean :1.032 Mean :143.3 Mean : 84.73 Mean :1.122
3rd Qu.:1.000 3rd Qu.:165.0 3rd Qu.: 88.00 3rd Qu.:1.000
Max. :3.000 Max. :980.0 Max. :972.00 Max. :4.000
num_dependants self_employed monthly_income purchase_price liquid_assets mortage_payment_history
Min. :0.00 Mode :logical Min. : 0 Min. : 25.0 Min. : 0 Min. :1.000
1st Qu.:0.00 FALSE:1726 1st Qu.: 2876 1st Qu.: 129.4 1st Qu.: 20 1st Qu.:1.000
Median :0.00 TRUE :257 Median : 3812 Median : 163.0 Median : 38 Median :2.000
Mean :0.77 Mean : 5197 Mean : 196.4 Mean : 4632 Mean :1.707
3rd Qu.:1.00 3rd Qu.: 5595 3rd Qu.: 225.0 3rd Qu.: 83 3rd Qu.:2.000
Max. :8.00 Max. :81000 Max. :1535.0 Max. :1000000 Max. :4.000
consumer_credit_history filed_bankruptcy property_type gender
Min. :1.000 Mode :logical Min. :1.000 Length:1983
1st Qu.:1.000 FALSE:1848 1st Qu.:2.000 Class :character
Median :1.000 TRUE :135 Median :2.000 Mode :character
Mean :2.105 Mean :1.861
3rd Qu.:2.000 3rd Qu.:2.000
Max. :6.000 Max. :3.000
The missing values have been resolved by removing all individuals with missing variables. Because of the size of the data set it will not affect the validity of the tests. There are 1983 observations in df2 instead of the 1988 in the original dataframe. The mean applicant income and liquid assets have changed slightly but most of the key statistics are unchanged.
hist(df2$applicant_income, bins=100)
Warning in plot.window(xlim, ylim, "", ...) :
"bins" is not a graphical parameter
Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...) :
"bins" is not a graphical parameter
Warning in axis(1, ...) : "bins" is not a graphical parameter
Warning in axis(2, at = yt, ...) : "bins" is not a graphical parameter
The vast majority of applicants have incomes between 0 and £100,000. There are a few bigger incomes over £600,000. This explains why the median 64 is below the mean 84.73.
hist(df2$purchase_price, bins=100)
Warning in plot.window(xlim, ylim, "", ...) :
"bins" is not a graphical parameter
Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...) :
"bins" is not a graphical parameter
Warning in axis(1, ...) : "bins" is not a graphical parameter
Warning in axis(2, at = yt, ...) : "bins" is not a graphical parameter
A similar trend with the over 1000 purchases prices on the lower end between £100,000 and £200,000, but less than 100 over the £500,000 threshold.
3B. The relationship of a pair of continuous variables.
plot(df2$applicant_income, df2$purchase_price,
xlab = "Applicant Income",
ylab = "Purchase Price", )
cor(df2$purchase_price, df2$applicant_income)
[1] 0.4503725
The correlation is 0.4503725 which is fairly weak but still positive. A regression model gives an estimate purchase price = £140,309.36 + 0.66258 x applicant income meaning that on the whole the higher the income the higher the purchase price. But the model is not that accurate and the majority of observations are on the lower end of both variables, with some outliers scattered around. The income in particular varies a lot which can affect the mean.
reg1 <- lm(df2$purchase_price ~ df2$applicant_income)
summary(reg1)
Call:
lm(formula = df2$purchase_price ~ df2$applicant_income)
Residuals:
Min 1Q Median 3Q Max
-495.59 -51.15 -21.81 31.00 1152.91
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 140.30936 3.58716 39.11 <2e-16 ***
df2$applicant_income 0.66258 0.02951 22.45 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 114.5 on 1981 degrees of freedom
Multiple R-squared: 0.2028, Adjusted R-squared: 0.2024
F-statistic: 504.1 on 1 and 1981 DF, p-value: < 2.2e-16
3C. The association b/w a categorical variable and a continuous one.
install.packages("ggplot2")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:
https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/sgp13/AppData/Local/R/win-library/4.4’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.4/ggplot2_3.5.2.zip'
Content type 'application/zip' length 5017658 bytes (4.8 MB)
downloaded 4.8 MB
package ‘ggplot2’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\sgp13\AppData\Local\Temp\RtmpGOw5Qj\downloaded_packages
library(ggplot2)
Warning: package ‘ggplot2’ was built under R version 4.4.3
ggplot(df2, aes(x = df2$loan_decision, y = df2$applicant_income)) +
geom_boxplot()
Warning: Use of `df2$loan_decision` is discouraged.
ℹ Use `loan_decision` instead.
Warning: Use of `df2$applicant_income` is discouraged.
ℹ Use `applicant_income` instead.
Median income for approvals is higher than for rejections. The people who got their loan approved had higher incomes than those who were rejected. There are lots of outliers suggesting because of the size and variation of the dataset a box plot is not the most valid way to present the data.
3D. The relationship between more than two variables, e.g., using semantic mappings.
ggplot(df2, aes(x = applicant_income, y = purchase_price, color = married, shape = loan_decision)) +
geom_point(size = 4) +
labs(title = "Income vs Purchase Price by Marital Status and Loan Approval",
x = "Income",
y = "Purchase Price")
The graph shows how marriage and loan approval status link to income and purchase price. There are lots of blue circles showing lots if married people got a loan approved. Another observation is that there are mainly circles above a purchase price of 500 suggesting that people buying more expensive homes get approved for loans more. Also couples typically buy the more expensive homes. At the lower end of purchase price there is more of a mix of approvals and rejections.
ggplot(df2, aes(x = num_dependants)) +
geom_bar() +
geom_text(stat = "count", aes(label = ..count..),vjust = -0.4, colour = "red") +
labs(title = "Frequency of Number of Dependents",
x = "Number of Dependents",
y = "Count")
Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
ℹ Please use `after_stat(count)` instead.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
The lower end of the number of dependents is much more common and there are only 10 individuals with over 4 dependents, representing 0.504% of the data. This suggests that the parameters for the data collection were too wide and some findings should have been excluded to make the better more representative of the population.
ggplot(df2, aes(x = loan_decision, fill = married)) +
geom_bar() +
labs(title = "Frequency of Loan Approval Status",
x = "Loan Status",
y = "Count",
fill = "Married")
There are far more approvals than rejections and most of the approvals were for married people. The marital and loan status only had two categories and created much more reliable data.
test1 <- table(df2$loan_decision, df2$married)
test1
FALSE TRUE
approve 575 1166
reject 102 140
chisq.test(test1)
Pearson's Chi-squared test with Yates' continuity correction
data: test1
X-squared = 7.4621, df = 1, p-value = 0.006301
The Chi-squared test determines whether or not there is a relationship between marriage and loan decision in the dataset. The null hypothesis that the two variables are independent and the alternative hypothesis is that the two variables are associated. We get a P-Value of 0.006301 which is less than 0.05 so we can reject the null hypothesis at the 5% significance level. There is an association between marriage and loan decision because people who are married are more likely to get a loan.
install.packages("dplyr")
Error in install.packages : Updating loaded packages
library(dplyr)
Warning: package ‘dplyr’ was built under R version 4.4.3
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
subset1 <- df2 %>%
filter(married == "TRUE", loan_decision == "approve", gender == "male", applicant_income > mean(df2$applicant_income))
summary(subset1)
married race loan_decision occupancy loan_amount applicant_income num_units
Mode:logical Length:358 Length:358 Min. :1.000 Min. : 34.0 Min. : 85.0 Min. :1.000
TRUE:358 Class :character Class :character 1st Qu.:1.000 1st Qu.:152.0 1st Qu.: 97.0 1st Qu.:1.000
Mode :character Mode :character Median :1.000 Median :188.0 Median :115.0 Median :1.000
Mean :1.047 Mean :224.4 Mean :154.4 Mean :1.064
3rd Qu.:1.000 3rd Qu.:264.8 3rd Qu.:151.0 3rd Qu.:1.000
Max. :2.000 Max. :980.0 Max. :870.0 Max. :4.000
num_dependants self_employed monthly_income purchase_price liquid_assets mortage_payment_history
Min. :0.000 Mode :logical Min. : 1025 Min. : 43.0 Min. : 3.9 Min. :1.0
1st Qu.:0.000 FALSE:278 1st Qu.: 5000 1st Qu.: 210.5 1st Qu.: 38.6 1st Qu.:1.0
Median :1.000 TRUE :80 Median : 7500 Median : 285.0 Median : 84.5 Median :1.0
Mean :1.151 Mean : 9392 Mean : 324.1 Mean : 5758.9 Mean :1.5
3rd Qu.:2.000 3rd Qu.:10049 3rd Qu.: 364.2 3rd Qu.: 175.5 3rd Qu.:2.0
Max. :7.000 Max. :72529 Max. :1535.0 Max. :1000000.0 Max. :4.0
consumer_credit_history filed_bankruptcy property_type gender
Min. :1.000 Mode :logical Min. :1.000 Length:358
1st Qu.:1.000 FALSE:343 1st Qu.:2.000 Class :character
Median :1.000 TRUE :15 Median :2.000 Mode :character
Mean :1.955 Mean :1.905
3rd Qu.:2.000 3rd Qu.:2.000
Max. :6.000 Max. :3.000
subset2 <- df2 %>%
filter(married == "FALSE", loan_decision == "approve", gender == "male", applicant_income > mean(df2$applicant_income))
summary(subset2)
married race loan_decision occupancy loan_amount applicant_income num_units
Mode :logical Length:76 Length:76 Min. :1.000 Min. : 40.0 Min. : 85.0 Min. :1.000
FALSE:76 Class :character Class :character 1st Qu.:1.000 1st Qu.:126.5 1st Qu.: 99.0 1st Qu.:1.000
Mode :character Mode :character Median :1.000 Median :178.5 Median :114.5 Median :1.000
Mean :1.013 Mean :182.5 Mean :160.3 Mean :1.092
3rd Qu.:1.000 3rd Qu.:193.2 3rd Qu.:157.2 3rd Qu.:1.000
Max. :2.000 Max. :650.0 Max. :666.0 Max. :4.000
num_dependants self_employed monthly_income purchase_price liquid_assets mortage_payment_history
Min. :0.0000 Mode :logical Min. : 1714 Min. : 75.0 Min. : 0.90 Min. :1.000
1st Qu.:0.0000 FALSE:62 1st Qu.: 4154 1st Qu.: 173.8 1st Qu.: 39.92 1st Qu.:1.000
Median :0.0000 TRUE :14 Median : 7376 Median : 211.5 Median : 88.00 Median :2.000
Mean :0.2237 Mean : 8339 Mean : 246.9 Mean : 179.08 Mean :1.632
3rd Qu.:0.0000 3rd Qu.: 9517 3rd Qu.: 301.0 3rd Qu.: 195.25 3rd Qu.:2.000
Max. :4.0000 Max. :29167 Max. :1050.0 Max. :2369.00 Max. :3.000
consumer_credit_history filed_bankruptcy property_type gender
Min. :1.000 Mode :logical Min. :1.000 Length:76
1st Qu.:1.000 FALSE:73 1st Qu.:1.000 Class :character
Median :1.000 TRUE :3 Median :2.000 Mode :character
Mean :1.803 Mean :1.697
3rd Qu.:2.000 3rd Qu.:2.000
Max. :6.000 Max. :3.000
There were more married high earning men who successfully applied for loans. Because of the defined subsets the data is much more evenly distributed. The means are higher than the median for almost all the variables so there are still outliers affecting the averages but the subsets are more reliable than the whole sample. The only variable with an outlier is number of dependents for unmarried men.
married <- (subset1$applicant_income)
single <- (subset2$applicant_income)
t.test(married, single)
Welch Two Sample t-test
data: married and single
t = -0.379, df = 106.43, p-value = 0.7054
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-36.71956 24.93317
sample estimates:
mean of x mean of y
154.4358 160.3289
The P-Value was 0.7054 which is much higher than 0.05 which suggests there is no evidence that the means are significantly different. The married male high earners who successfully applied for a loan don’t make significantly less than the non-married male high earners who were also successful.
married2 <- (subset1$purchase_price)
single2 <- (subset2$purchase_price)
t.test(married2, single2)
Welch Two Sample t-test
data: married2 and single2
t = 4.256, df = 156.84, p-value = 3.57e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
41.37798 113.04726
sample estimates:
mean of x mean of y
324.0685 246.8559
The test on purchase prices of the two subsets gave a P-Value of 3.57e-05 which is approximately 0.0000357 and much less than 0.05. This means that at a 5% significance level we can reject H0 that the means are the same. Married men that earn above average incomes secure loans for more expensive houses.
married3 <- (subset1$num_units)
single3 <- (subset2$num_units)
t.test(married3, single3)
Welch Two Sample t-test
data: married3 and single3
t = -0.49537, df = 90.933, p-value = 0.6215
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.13957433 0.08385542
sample estimates:
mean of x mean of y
1.064246 1.092105
The P-Value for this test on number of units was 0.6215 which is greater than 0.05. There was no significant difference in the number of units in the property.
The married men had similar incomes and units in their houses, yet got loans for more expensive houses. They had more dependents which could explain the prices with houses in more child friendly areas near good schools being more expensive.
df2$bankruptcy_dummy <- ifelse(df2$filed_bankruptcy == "TRUE", 1, 0)
summary(df2$bankruptcy_dummy)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00000 0.00000 0.00000 0.06808 0.00000 1.00000
df2$loan_decision_dummy <- ifelse(df2$loan_decision == "approve", 1, 0)
summary(df2$loan_decision_dummy)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 1.000 1.000 0.878 1.000 1.000
table <- df2 %>%
group_by(loan_decision) %>%
summarise(across(where(is.numeric), mean, na.rm = TRUE))
Warning: There was 1 warning in `summarise()`.
ℹ In argument: `across(where(is.numeric), mean, na.rm = TRUE)`.
ℹ In group 1: `loan_decision = "approve"`.
Caused by warning:
! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
Supply arguments directly to `.fns` through an anonymous function instead.
# Previously
across(a:b, mean, na.rm = TRUE)
# Now
across(a:b, \(x) mean(x, na.rm = TRUE))
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
print(table)
People who were successful in their loan application had higher average monthly income but less number of dependents. Their purchase price and liquid assets were higher but consumer credit history much lower. The average bankruptcy for people who secured a loan was 5.9 times less than those who were unsuccessful. This is the variable that differs the most significantly across the table.
reg9a <- lm(df2$loan_decision_dummy~ df2$monthly_income + df2$loan_amount + df2$num_units + df2$num_dependants + df2$purchase_price + df2$liquid_assets)
summary(reg9a)
Call:
lm(formula = df2$loan_decision_dummy ~ df2$monthly_income + df2$loan_amount +
df2$num_units + df2$num_dependants + df2$purchase_price +
df2$liquid_assets)
Residuals:
Min 1Q Median 3Q Max
-0.97932 0.09232 0.11424 0.12648 0.39149
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.650e-01 2.378e-02 40.574 < 2e-16 ***
df2$monthly_income -9.129e-07 1.782e-06 -0.512 0.608414
df2$loan_amount -5.787e-04 1.658e-04 -3.491 0.000492 ***
df2$num_units -8.265e-02 1.671e-02 -4.946 8.21e-07 ***
df2$num_dependants -1.022e-02 6.697e-03 -1.526 0.127101
df2$purchase_price 5.145e-04 1.094e-04 4.703 2.74e-06 ***
df2$liquid_assets 2.498e-08 1.083e-07 0.231 0.817579
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3236 on 1976 degrees of freedom
Multiple R-squared: 0.02613, Adjusted R-squared: 0.02317
F-statistic: 8.836 on 6 and 1976 DF, p-value: 1.569e-09
In the model with all the continuous monetary variables, despite many of the variables being statistically significant, the adjusted R squared is very low at 0.023. This linear regression model is not very good at explaining loan decisions. Only 2.3% of variations in loan approval decision can be explained by the variables in the model.
reg9b <- lm(df2$loan_decision_dummy~ df2$loan_amount + df2$num_units + df2$purchase_price + df2$bankruptcy_dummy + df2$consumer_credit_history)
summary(reg9b)
Call:
lm(formula = df2$loan_decision_dummy ~ df2$loan_amount + df2$num_units +
df2$purchase_price + df2$bankruptcy_dummy + df2$consumer_credit_history)
Residuals:
Min 1Q Median 3Q Max
-0.98798 0.04261 0.06283 0.10702 0.66435
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.046e+00 2.350e-02 44.521 < 2e-16 ***
df2$loan_amount -4.544e-04 1.550e-04 -2.931 0.00342 **
df2$num_units -6.558e-02 1.577e-02 -4.158 3.34e-05 ***
df2$purchase_price 3.927e-04 9.736e-05 4.034 5.69e-05 ***
df2$bankruptcy_dummy -2.639e-01 2.841e-02 -9.291 < 2e-16 ***
df2$consumer_credit_history -4.215e-02 4.320e-03 -9.755 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3048 on 1977 degrees of freedom
Multiple R-squared: 0.1355, Adjusted R-squared: 0.1333
F-statistic: 61.99 on 5 and 1977 DF, p-value: < 2.2e-16
In the second model that includes bankruptcy and consumer credit history the adjusted R squared is increased to 0.1333. It is still a weak model but all the variables are significant. The new additions have lower Pr(>|t|) values and are more significant. More consumer credit history reduces chance of securing a loan.