# Multisplit Gini function
rm(list=ls())
gini_process <-function(absfreq){
freq = prop.table(absfreq, 1)
freqSum = rowSums(prop.table(absfreq))
rows = numeric(nrow(freq))
for (i in 1:nrow(freq)) {
rows[i] = rownames(freq)[i]
}
GINIs = numeric(nrow(freq))
GINI = 0
for (i in 1:nrow(freq)) {
GINIs[i] = 1 - freq[rows[i], 'No']^2 - freq[rows[i], 'Yes']^2
GINI = GINI + freqSum[rows[i]] * GINIs[i]
}
return (c(GINI, GINIs))
}
# Read data from disk
car_data = read.csv("../car_data.csv")
# Create tables with frequencies for customers
customer_ids = table(car_data[, c(1, 5)])
gini_data = gini_process(customer_ids)
CUSTOMERID_GINI_TOTAL = gini_data[1]
CUSTOMERID_GINI_PER_CLASS = gini_data[(-1)] # negative index = skip
# Create tables with frequencies for sex
sex = table(car_data[, c(2, 5)])
gini_data = gini_process(sex)
SEX_GINI_TOTAL = gini_data[1]
SEX_GINI_PER_CLASS = gini_data[(-1)] # negative index = skip
# Create tables with frequencies for cars
car_types = table(car_data[, c(3, 5)])
gini_data = gini_process(car_types)
CARTYPES_GINI_TOTAL = gini_data[1]
CARTYPES_GINI_PER_CLASS = gini_data[(-1)] # negative index = skip
# Create tables with frequencies for budget
budget = table(car_data[, c(4, 5)])
gini_data = gini_process(budget)
BUDGET_GINI_TOTAL = gini_data[1]
BUDGET_GINI_PER_CLASS = gini_data[(-1)] # negative index = skip
Comments