Применение методов анализа формальных понятий для нахождения зависимости между анкетными показателями клиентов и фактом дефолта по кредиту

Алгоритм классификации по запросу. Анализ формальных понятий. Алгоритм ленивой классификации с помощью узорных структур. Модификация рандомизации алгоритма. Модификация с предварительным расчетом гипотез. Оценка возможности визуализации гипотез.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 04.08.2018
Размер файла 578,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

COL2 = []

COL3 = []

COL4 = []

COL5 = []

COL6 = []

COL7 = []

COL8 = []

COL9 = []

COL10 = []

N_OF_ITER = []

ALPHA = []

SAMPLE_SIZES = []

def generate_grid(N_OF_ITER,ALPHA,SAMPLE_SIZES):

X = [2000]

Y = [0.001, 0.002,0.003, 0.004, 0.005]

Z = [1,2,3,4,5]

for x in X:

for y in Y:

for z in Z:

N_OF_ITER.append(x)

ALPHA.append(y)

SAMPLE_SIZES.append(z)

generate_grid(N_OF_ITER,ALPHA,SAMPLE_SIZES)

MODIFICATION = "concepts_"

# MODIFICATION = ""

# for dir_name in os.listdir():

# dir_name = dir_name.strip(MODIFICATION).split('_')

# if len(dir_name)==3 and str.isnumeric(dir_name[0]) and str.isnumeric(dir_name[2]):

# number_of_iterations = int(dir_name[0])

# alpha = float(dir_name[1])

# subsample_size = int(dir_name[2])

# # CONDITIONS. Что печатать?

# # if alpha >= 0.002 and alpha <= 0.005:

# if True:

# N_OF_ITER.append(number_of_iterations)

# ALPHA.append(alpha)

# SAMPLE_SIZES.append(subsample_size)

for number_of_iterations,alpha,subsample_size in zip(N_OF_ITER,ALPHA,SAMPLE_SIZES):

DIR_NAME = MODIFICATION+str(alpha)+'_'+str(subsample_size)

result = pd.DataFrame()

for NUMBER_OF_MINI_TEST in range(8):

FILE_NAME = str(NUMBER_OF_MINI_TEST)+".csv"

PATH = ".\\"+DIR_NAME+"\\"+FILE_NAME

result_mini_test = pd.read_csv(PATH, index_col=0)

result = pd.concat((result,result_mini_test))

y_true = result.y_true

num_of_unclassified = np.sum((result.NEG_VOTES == 0) & (result.POS_VOTES == 0))

# Вычитаем голоса

y_pred_diff = result.POS_VOTES*1 - result.NEG_VOTES*1

y_pred_diff.loc[(result.NEG_VOTES == 0) & (result.POS_VOTES == 0)] = 0 # У КОГО СЧЕТ 0:0, тех относим к классу 0

# y_pred_diff = 1 / (1 + np.exp(-y_pred_diff))

y_pred_diff = y_pred_diff - np.min(y_pred_diff)/(np.max(y_pred_diff)-np.min(y_pred_diff))

roc_auc_diff = sklearn.metrics.roc_auc_score(y_true,y_pred_diff)

# Доля голосов

y_pred_div = result.POS_VOTES*1/(result.POS_VOTES*1+result.NEG_VOTES*1)

y_pred_div.loc[(result.NEG_VOTES == 0) & (result.POS_VOTES == 0)] = 0 # У КОГО СЧЕТ 0:0, тех относим к классу 0

roc_auc_div = sklearn.metrics.roc_auc_score(y_true,y_pred_div)

COL1.append(number_of_iterations)

COL2.append(alpha)

COL3.append(subsample_size)

# COL4.append(roc_auc)

COL5.append(roc_auc_div)

COL6.append(num_of_unclassified)

COL7.append(roc_auc_diff)

# 'ROC-AUC':COL4

summary = pd.DataFrame({'number_of_iterations':COL1,'alpha':COL2,'subsample_size':COL3, 'roc_auc_div':COL5,'roc_auc_diff':COL7,'num_of_unclassified':COL6

})

pd.set_option('display.max_rows', 1000)

summary.set_index(['number_of_iterations','alpha','subsample_size'])

# ##### Classifying objects with missing data

# In[624]:

df_na = pd.read_csv('cs-training.csv', index_col=0)

df_na = df_na[df_na.MonthlyIncome.isnull()]

df_na.shape

# In[628]:

df_na_pos = df_na[df_na.SeriousDlqin2yrs == 1]

df_na_minus = df_na.drop(df_na_pos.index)

df_na_pos_test = df_na_pos.sample(frac=0.1, random_state=1)

df_na_neg_test = df_na_minus.sample(frac=0.1, random_state=1)

df_na_test = df_na_pos_test.append(df_na_neg_test)

# In[636]:

# df_na_test.to_csv('df_na_test.csv')

# In[643]:

df_na_test = pd.read_csv('df_na_test.csv', index_col=0)

y_na_true = df_na_test.SeriousDlqin2yrs

df_na_test = df_na_test.drop('SeriousDlqin2yrs', axis=1)

# In[843]:

df_na_test = pd.read_csv('cs-test.csv', index_col=0)

y_na_true = df_na_test.SeriousDlqin2yrs

df_na_test = df_na_test.drop('SeriousDlqin2yrs', axis=1)

ALPHA = [0.001]

SAMPLE_SIZES = [3]

N_OF_NEEDED_CONCEPTS = [2000]

for alpha in ALPHA:

for subsample_size in SAMPLE_SIZES:

for number_of_concepts in N_OF_NEEDED_CONCEPTS:

start_time = datetime.datetime.now()

print("PARAMS: ", number_of_concepts, alpha, subsample_size)

print("MINING PLUS (+) STARTED AT:", start_time.ctime())

DIR_NAME = "concepts_"+str(alpha)+'_'+str(subsample_size)

PATH = ".\\"+DIR_NAME+"\\"

positive_concepts_min = pd.read_csv(PATH+str(number_of_concepts)+'_'+"positive_concepts_min.csv",index_col=0).values

positive_concepts_max = pd.read_csv(PATH+str(number_of_concepts)+'_'+"positive_concepts_max.csv",index_col=0).values

negative_concepts_min = pd.read_csv(PATH+str(number_of_concepts)+'_'+"negative_concepts_min.csv",index_col=0).values

negative_concepts_max = pd.read_csv(PATH+str(number_of_concepts)+'_'+"negative_concepts_max.csv",index_col=0).values

positive_n_intersections_with_neg = pd.read_csv(PATH+str(number_of_concepts)+'_'+"positive_n_intersections_with_neg.csv",index_col=0, header=-1).values[:,0]

negative_n_intersections_with_pos = pd.read_csv(PATH+str(number_of_concepts)+'_'+"negative_n_intersections_with_neg.csv",index_col=0, header=-1).values[:,0]

NUMBER_OF_MINI_TEST = 0

mini_test_size = df_na_test.shape[0]//8

start_index = mini_test_size*NUMBER_OF_MINI_TEST

end_index = start_index+mini_test_size

mini_test_index = df_na_test.index[start_index:end_index]

NUMBER_OF_POS_VOTES = []

NUMBER_OF_NEG_VOTES = []

start_time = datetime.datetime.now()

for test_index in mini_test_index:

test_obj = df_na_test.loc[test_index].values

neg_itersections_with_all_pos = np.zeros(number_of_concepts)

pos_itersections_with_all_neg = np.zeros(number_of_concepts)

X_neg = X_neg_true[np.random.choice(X_neg_true.shape[0], size=X_pos.shape[0], replace=False)]

test_obj_max = test_obj.copy()

test_obj_max[np.isnan(test_obj_max)] = np.inf

test_obj_min = test_obj.copy()

test_obj_min[np.isnan(test_obj_min)] = -np.inf

premises_min = np.minimum(positive_concepts_min,test_obj_min)

premises_max = np.maximum(positive_concepts_max,test_obj_max)

premises = np.concatenate((premises_min, premises_max), axis=1)

pos_itersections_with_all_neg = np.apply_along_axis(lambda row: np.sum( ((row[:10] <= X_neg) & (X_neg <= row[10:])).all(axis=1) ), 1, premises)

premises_min = np.minimum(negative_concepts_min,test_obj_min)

premises_max = np.maximum(negative_concepts_max,test_obj_max)

premises = np.concatenate((premises_min, premises_max), axis=1)

neg_itersections_with_all_pos = np.apply_along_axis(lambda row: np.sum( ((row[:10] <= X_pos) & (X_pos <= row[10:])).all(axis=1) ), 1, premises)

NUMBER_OF_POS_VOTES.append(np.sum(pos_itersections_with_all_neg/X_neg.shape[0] <= alpha))

NUMBER_OF_NEG_VOTES.append(np.sum(neg_itersections_with_all_pos/X_pos.shape[0] <= alpha))

df_result = pd.DataFrame({'POS_VOTES':NUMBER_OF_POS_VOTES,'NEG_VOTES':NUMBER_OF_NEG_VOTES,'y_true':y_na_true[mini_test_index]}, index=mini_test_index)

FILE_NAME = 'na_'+str(NUMBER_OF_MINI_TEST)+".csv"

PATH = ".\\"+DIR_NAME+"\\"+FILE_NAME

df_result.to_csv(PATH)

print(datetime.datetime.now() - start_time)

print("ENDED AT:", datetime.datetime.now())

print("")

# In[34]:

COL1 = []

COL2 = []

COL3 = []

COL4 = []

COL5 = []

COL6 = []

COL7 = []

COL8 = []

COL9 = []

COL10 = []

N_OF_ITER = []

ALPHA = []

SAMPLE_SIZES = []

# def generate_grid(N_OF_ITER,ALPHA,SAMPLE_SIZES):

# X = [2000]

# Y = [0.001, 0.002,0.003, 0.004, 0.005]

# Z = [1,2,3,4,5]

# for x in X:

# for y in Y:

# for z in Z:

# N_OF_ITER.append(x)

# ALPHA.append(y)

# SAMPLE_SIZES.append(z)

# generate_grid(N_OF_ITER,ALPHA,SAMPLE_SIZES)

MODIFICATION = "concepts_"

# MODIFICATION = ""

for dir_name in os.listdir():

dir_name = dir_name.strip(MODIFICATION).split('_')

if len(dir_name)==3 and str.isnumeric(dir_name[0]) and str.isnumeric(dir_name[2]):

number_of_iterations = int(dir_name[0])

alpha = float(dir_name[1])

subsample_size = int(dir_name[2])

# CONDITIONS. Что печатать?

if alpha >= 0.002 and alpha <= 0.005:

# if True:

N_OF_ITER.append(number_of_iterations)

ALPHA.append(alpha)

SAMPLE_SIZES.append(subsample_size)

for number_of_iterations,alpha,subsample_size in zip(N_OF_ITER,ALPHA,SAMPLE_SIZES):

DIR_NAME = MODIFICATION+str(alpha)+'_'+str(subsample_size)

result = pd.DataFrame()

for NUMBER_OF_MINI_TEST in range(8):

FILE_NAME = "na_"+str(NUMBER_OF_MINI_TEST)+".csv"

PATH = ".\\"+DIR_NAME+"\\"+FILE_NAME

result_mini_test = pd.read_csv(PATH, index_col=0)

result = pd.concat((result,result_mini_test))

y_true = result.y_true

num_of_unclassified = np.sum((result.NEG_VOTES == 0) & (result.POS_VOTES == 0))

# Вычитаем голоса

y_pred_diff = result.POS_VOTES*1 - result.NEG_VOTES*1

y_pred_diff.loc[(result.NEG_VOTES == 0) & (result.POS_VOTES == 0)] = 0 # У КОГО СЧЕТ 0:0, тех относим к классу 0

# y_pred_diff = 1 / (1 + np.exp(-y_pred_diff))

y_pred_diff = y_pred_diff - np.min(y_pred_diff)/(np.max(y_pred_diff)-np.min(y_pred_diff))

roc_auc_diff = sklearn.metrics.roc_auc_score(y_true,y_pred_diff)

# Доля голосов

y_pred_div = result.POS_VOTES*1/(result.POS_VOTES*1+result.NEG_VOTES*1)

y_pred_div.loc[(result.NEG_VOTES == 0) & (result.POS_VOTES == 0)] = 0 # У КОГО СЧЕТ 0:0, тех относим к классу 0

roc_auc_div = sklearn.metrics.roc_auc_score(y_true,y_pred_div)

COL1.append(number_of_iterations)

COL2.append(alpha)

COL3.append(subsample_size)

# COL4.append(roc_auc)

COL5.append(roc_auc_div)

COL6.append(num_of_unclassified)

COL7.append(roc_auc_diff)

# 'ROC-AUC':COL4

summary = pd.DataFrame({'number_of_iterations':COL1,'alpha':COL2,'subsample_size':COL3, 'roc_auc_div':COL5,'roc_auc_diff':COL7,'num_of_unclassified':COL6

})

pd.set_option('display.max_rows', 1000)

summary.set_index(['number_of_iterations','alpha','subsample_size'])

# ### Logistic regression

# In[19]:

df_train = df.drop(df_test.index).drop('SeriousDlqin2yrs', axis=1)

y_train_true = y[df_train.index]

y_test_true = y[df_test.index]

# In[54]:

from sklearn import linear_model

from sklearn import metrics

X = df_train.values

for C in [10**i for i in range(-10,10)]:

LR = linear_model.LogisticRegression(C=C, penalty='l1')

LR.fit(X,y_train_true)

print("C=",C," ","L=L1",end="\t\t")

print("Train score",sklearn.metrics.roc_auc_score(y_train_true, LR.predict_proba(X)[:,1]), end="\t")

print("Test score",sklearn.metrics.roc_auc_score(y_test_true, LR.predict_proba(X_test)[:,1]))

for C in [10**i for i in range(-10,10)]:

LR = linear_model.LogisticRegression(C=C, penalty='l2')

LR.fit(X,y_train_true)

print("C=",C," ","L=L2",end="\t\t")

print("Train score",sklearn.metrics.roc_auc_score(y_train_true, LR.predict_proba(X)[:,1]), end="\t")

print("Test score",sklearn.metrics.roc_auc_score(y_test_true, LR.predict_proba(X_test)[:,1]))

# ### Random forest

# In[ ]:

from sklearn import ensemble

from sklearn import metrics

X = df_train.values

ensemble.RandomForestClassifier()

for n_of_est in [10,50,100,200,500,1000]:

RF = ensemble.RandomForestClassifier(n_estimators=n_of_est, n_jobs=8)

RF.fit(X,y_train_true)

print("n_estimators=",n_of_est,end="\t\t")

print("Train score",sklearn.metrics.roc_auc_score(y_train_true, RF.predict_proba(X)[:,1]), end="\t")

print("Test score",sklearn.metrics.roc_auc_score(y_test_true, RF.predict_proba(X_test)[:,1]))

# ### 5. Comparison of the results

# MLCA and Random forest showed comparable results: AUC_ROC = $~0.84$.

#

# It's much more than logistic regression: AUC_ROC = $~0.68$.

# MLCA with best parameters was applied to Kaggle's test dataset (more than 100k objects including objects with missing data). The result AUC_ROC was approximately the same 0.843510.

# In the future one can perform data cleaning and crossvalidation that probably improve the quality of the classifier.

Размещено на Allbest.ru


Подобные документы

  • Программное обеспечение для получения исходных данных для обучения нейронных сетей и классификации товаров с их помощью. Алгоритм метода обратного распространения ошибки. Методика классификации товаров: составление алгоритма, программная реализация.

    дипломная работа [2,2 M], добавлен 07.06.2012

  • Модификация алгоритма RPC таким образом, чтобы он не требовал входного параметра, но сохранил свою гибкость при решении задачи нахождения максимальной клики для разных графов. Метод ветвей и границ. Построение функции-классификатора. Листинг алгоритма.

    курсовая работа [197,8 K], добавлен 06.10.2016

  • Изучение основных понятий и определений теории графов. Рассмотрение методов нахождения кратчайших путей между фиксированными вершинами. Представление математического и программного обоснования алгоритма Флойда. Приведение примеров применения программы.

    контрольная работа [1,4 M], добавлен 04.07.2011

  • Принципы реализации программы проверки статистических гипотез с использованием t-критерия Стьюдента, ее общий алгоритм. Особенности применения двухвыборочного критерия для независимых выборок. Функциональные модели решения задачи для различных функций.

    курсовая работа [644,2 K], добавлен 25.01.2010

  • Алгоритмы нахождения кратчайшего пути: анализ при помощи математических объектов - графов. Оптимальный маршрут между двумя вершинами (алгоритм Декстры), всеми парами вершин (алгоритм Флойда), k-оптимальных маршрутов между двумя вершинами (алгоритм Йена).

    курсовая работа [569,6 K], добавлен 16.01.2012

  • Постановка задачи сортировки. Анализ основных понятий сортировок слияниями. Алгоритм сортировки простым и естественным слиянием. Оценка сложности алгоритма. Программная реализация простого слияния. Тестирование меню на корректность входных данных.

    курсовая работа [283,6 K], добавлен 22.06.2015

  • Обзор существующих методов межпроцедурного анализа. Получение входных и выходных данных подпрограмм с помощью графа алгоритма. Описание входных и выходных данных подпрограммы в терминах фактических параметров. Определение параллелизма по графу алгоритма.

    учебное пособие [77,5 K], добавлен 28.06.2009

  • Задачи, решаемые методом динамического программирования. Основные этапы нахождения деревянного алгоритма решения задачи. Выполнение алгоритма Прима. Построение Эйлерового цикла. Решение задач средствами Excel. Алгоритм основной программы - Derevo.

    курсовая работа [586,3 K], добавлен 04.04.2015

  • Построение систем визуализации моделей раскроя и их модификации. Анализ способов и методов создания универсального хранилища данных, на примере построения динамически формируемого информационного файла. Графические возможностей языка высокого уровня С.

    научная работа [355,5 K], добавлен 06.03.2009

  • Особенности кодирования информации с помощью метода Хаффмана. Реализация кодера и декодера с использованием статического алгоритма Хаффмана. Структура программы, оценка ее эффективности (степени сжатия) в зависимости от типа и размера сжимаемых файлов.

    курсовая работа [136,2 K], добавлен 15.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.