Разработка многокритериальных систем поддержки принятия решений в бизнесе
Изучение системы поддержки принятия решений и анализ их применения в банковском бизнесе. Разработка системы поддержки принятия решения, которая будет выдавать оптимальный объем выдачи каждого из кредитных продуктов в зависимости от желаемых целей.
Рубрика | Менеджмент и трудовые отношения |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 01.12.2019 |
Размер файла | 3,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
данные, полученные от экспертов, могут быть использованы для дальнейшего исследования.
Используя метод ранжировки критериев на основе мнений экспертов были получены:
коэффициенты для аддитивной функции полезности (таблица 12) и шкала предпочтений кредитных продуктов (график 1).
После построения математической модели (4)-(10) поставленной задачи оптимизации объема выручки каждого кредитного продукта, был описан алгоритм решения симплекс-методом, и выполнена его реализация с помощью функции linprog библиотеки scipy.optimize, а также реализация графического интерфейса с помощью пакета pyqt4.
В результате работы программы при исходных ограничениях был получен ответ: решения не существует. Таким образом, получаем вывод:
необходима корректировка стратегии банка.
Как один из возможных вариантов решения:
Снизить ожидания по выручке из канала digital;
Увеличить аппетит к риску до значения предыдущего месяца банка.
И в результате работы программы получаем рекомендуемый объём выручки по продуктам (рисунок 13).
Вывод: исходная стратегия развития банка не возможна в текущих условиях бизнеса, поэтому предлагается корректировка показателей, тогда СППР в результате работы выдаст рекомендуемый объем выдач кредитных продуктов.
Заключение
Основная цель данной дипломной работы - рассмотрение и реализация всех этапов разработки системы поддержки принятия решения для конкретного бизнеса, в данном случае розничного банковского бизнеса.
В ходе выполнения работы были проанализированы существующие модели СППР, их области применения, а также интеграция методов машинного обучения в разработку СППР. Для реализации СППР под конкретный бизнес были выполнены следующие этапы разработки:
Рассмотрение основных кредитных продуктов, выявление значимых свойств и параметров, влияющих на бизнес;
Моделирование бизнес-процессов реализации продуктов в зависимости от канала продаж;
Построение balanced score card, постановка целей и метрик, определяющих достижение желаемого результата;
Прогнозирование спроса на ретро-данных с помощью анализа временных рядов потока заявок по каждому продукту;
Построение математической модели задачи оптимизации;
Решение задачи и программная реализация на языке Python;
Интерпретация результата и корректировка стратегии банка;
Реализация графического интерфейса.
В результате работы была получена модель, настроенная под текущие цели банка и получена рекомендация по объему выдач каждого кредитного продукта на следующий месяц. Полученный результат можно интерпретировать как напрямую, т. е. как рекомендацию банку к стремлению достижения полученных конкретных значений в рублях, так и в относительном смысле, т. е. расчет доли каждого продукта в кредитном портфеле за месяц. Кроме того, в результате работы программы были предложены рекомендации по изменению стратегии развития бизнеса.
В качестве возможных векторов дальнейшей разработки могут быть улучшены следующие пункты в работе описанной СППР:
Обобщение целей банка, т. е. добавление в математическую модель всех метрик, на которые ориентируется бизнес;
Применение машинного обучения для получения весовых коэффициентов функции полезности;
Применить более точные алгоритмы для прогнозирования спроса (к примеру, ARIMA);
Реализовать user-friendly интерфейс.
Список литературы
[1] Словарь банковских терминов и экономических понятий. URL: https://www.banki.ru/wikibank/ (дата обращения 18.02.19)
[2] A. Tanaamah, J. Prestiliano and E. Djami «Decision support system to select candidates for loan using TOPSIS» (SINIBIS, 2016), p.65-69
[3] Кулешова В. «Система «Кредитный конвейер» как средство автоматизации кредитования в банковской сфере» («Наука, техника и образование», 2015), с. 23-25
[4] Филипповой Анны «Многокритериальная оптимизация численности сотрудников розничного блока в коммерческом банке» (2016), с.47-50
[5] Учебное пособие А.В. Лотов, И.И. Поспелова «Многокритериальные задачи принятия решения», 2008), с.123-147
[6] Е.В. Пучков «Разработка системы поддержки принятия решений для управления кредитными рисками банка», с.54-60
[7] G. Rigopoulos, J. Psarras, D. Th. Askounis «A Decision Support System for Supervised Assignment in Banking Decisions», p.76-81
[8] D. Balkovskaya and Liubov Filneva «The use of the balanced scorecard in bank strategic management» (Int. J. Business Excellence, 2016) , p.48-67
URL:https://publications.hse.ru/mirror/pubs/share/folder/o257sycjns/direct/173400291
[9] Подиновский В.В. Ногин В.Д. Парето-оптимальные решения многокритериальных задач. М.: Наука. Гл. ред. физ.-мат. лит. 1982.
[10] Учебное пособие М.А. Харченко «Корреляционный анализ» Издательско-полиграфический центр Воронежского государственного университета 2008, с.11
[11] Воскобойников Ю. Е. Эконометрика в Excel : учеб. пособие. Ч. 2. Анализ временных рядов / Ю. Е. Воскобойников ; Новосиб. гос. архитектур.-строит. ун-т. - Новосибирск : НГАСУ (Сибстрин), 2008. - 152 с.
[12] Учебное пособие О.В.Болотникова, Д.В.Тарасов, Р.В.Тарасов «Линейное программирование: симплекс-метод и двойственность» (Пенза, 2015)
Программные средства
Jupyter notebook;
Qt Designer;
Aris Express;
Microsoft Excel.
Приложение
Обозначение блок-схем в ARIS Express
- блок для обозначения события, отражающего исход выполнения одной функции и/или необходимость инициации другой функции;
- блок для обозначения действия, выполняемого для реализации некоторой операции при появлении заданного набора событий и направленное на получение определённого результата;
- блок, определяющий отдел/департамент;
- должность в составе подразделения;
- локация, месторасположение;
- хранилище данных, база данных;
- IT-система;
- оператор исключающего ИЛИ
Программа. Разработка системы поддержки принятия решения в Python
In [4]:
from scipy import optimize
import numpy as np
import pandas as pd
In [5]:
df = pd.read_csv('stand.csv',
sep=';', encoding='utf-8')
df=df.drop(['Characters'], axis=1)
In [6]:
df=df[0:13]
df
Out[6]:
CRC classic |
CRC premium |
APL NtB |
APL Bf |
APL P |
REF NtB |
REF Bf |
REF P |
AUT |
MRG |
||
0 |
0.270 |
0.190 |
0.180 |
0.150 |
0.130 |
0.160 |
0.110 |
0.100 |
0.160 |
0.100 |
|
1 |
80000.000 |
500000.000 |
240000.000 |
420000.000 |
380000.000 |
270000.000 |
630000.000 |
570000.000 |
680000.000 |
4800000.000 |
|
2 |
0.021 |
0.003 |
0.042 |
0.026 |
0.008 |
0.040 |
0.018 |
0.002 |
0.021 |
0.900 |
|
3 |
0.049 |
0.017 |
0.100 |
0.042 |
0.015 |
0.066 |
0.022 |
0.003 |
0.036 |
0.024 |
|
4 |
24.000 |
24.000 |
18.000 |
24.000 |
18.000 |
24.000 |
30.000 |
30.000 |
48.000 |
120.000 |
|
5 |
1.000 |
0.000 |
1.000 |
1.000 |
1.000 |
1.000 |
1.000 |
1.000 |
1.000 |
1.000 |
|
6 |
0.000 |
1.000 |
0.000 |
1.000 |
1.000 |
0.000 |
1.000 |
1.000 |
1.000 |
1.000 |
|
7 |
1.000 |
0.000 |
0.000 |
0.000 |
0.000 |
0.000 |
0.000 |
0.000 |
0.000 |
0.000 |
|
8 |
0.000 |
0.000 |
1.000 |
1.000 |
1.000 |
0.000 |
0.000 |
0.000 |
0.000 |
0.000 |
|
9 |
0.900 |
0.250 |
0.900 |
0.300 |
0.300 |
0.950 |
0.900 |
0.900 |
0.400 |
0.400 |
|
10 |
0.950 |
0.990 |
0.880 |
0.920 |
0.900 |
0.900 |
0.880 |
0.940 |
0.920 |
0.970 |
|
11 |
0.200 |
0.000 |
1.000 |
0.000 |
0.000 |
1.000 |
0.000 |
0.000 |
0.300 |
0.400 |
|
12 |
1.000 |
3.000 |
4.000 |
3.000 |
1.000 |
5.000 |
4.000 |
2.000 |
5.000 |
6.000 |
Загрузка исходных данных по продуктам¶
In [13]:
rate=[]
for i in df.iloc[0]:
rate.append(round(i,3))
avg_sum=[]
for i in df.iloc[1]:
avg_sum.append(round(i))
fpd=[]
for i in df.iloc[2]:
fpd.append(round(i,3))
d30_6=[]
for i in df.iloc[3]:
d30_6.append(round(i,3))
avg_dur=[]
for i in df.iloc[4]:
avg_dur.append(round(i,3))
st_channel=[]
for i in df.iloc[5]:
st_channel.append(round(i))
preapp_channel=[]
for i in df.iloc[6]:
preapp_channel.append(round(i))
rev_channel=[]
for i in df.iloc[7]:
rev_channel.append(round(i))
dig_channel=[]
for i in df.iloc[8]:
dig_channel.append(round(i))
TR=[]
for i in df.iloc[9]:
TR.append(round(i,3))
efficiency=[]
for i in df.iloc[10]:
efficiency.append(round(i,3))
ratio_ntb=[]
for i in df.iloc[11]:
ratio_ntb.append(round(i,3))
documents=[]
for i in df.iloc[12]:
documents.append(round(i))
In [5]:
'''profit=[]
for i in range(len(avg_sum)):
profit.append(avg_sum[i]*rate[i]/12*(avg_dur[i]+1)/2)'''
Out[5]:
'profit=[]\nfor i in range(len(avg_sum)):\n profit.append(avg_sum[i]*rate[i]/12*(avg_dur[i]+1)/2)'
Стандартизация данных¶
In [8]:
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler
In [9]:
import warnings
warnings.filterwarnings("ignore")
In [14]:
scale_features_std = StandardScaler()
n_avg_sum=scale_features_std.fit_transform(avg_sum)
n_avg_dur=scale_features_std.fit_transform(avg_dur)
n_documents=scale_features_std.fit_transform(documents)
Ранжирование¶
In [18]:
matrix=np.zeros((13,10))
for j in range (10):
matrix[0][j]=rate[j]
for j in range (10):
matrix[1][j]=n_avg_sum[j]
for j in range (10):
matrix[2][j]=fpd[j]
for j in range (10):
matrix[3][j]=d30_6[j]
for j in range (10):
matrix[4][j]=n_avg_dur[j]
for j in range (10):
matrix[5][j]=st_channel[j]
for j in range (10):
matrix[6][j]=preapp_channel[j]
for j in range (10):
matrix[7][j]=rev_channel[j]
for j in range (10):
matrix[8][j]=dig_channel[j]
for j in range (10):
matrix[9][j]=TR[j]
for j in range (10):
matrix[10][j]=efficiency[j]
for j in range (10):
matrix[11][j]=ratio_ntb[j]
for j in range (10):
matrix[12][j]=n_documents[j]
In [19]:
matrix
Out[19]:
array([[ 2.70000000e-01, 1.90000000e-01, 1.80000000e-01,
1.50000000e-01, 1.30000000e-01, 1.60000000e-01,
1.10000000e-01, 1.00000000e-01, 1.60000000e-01,
1.00000000e-01],
[ -5.85895382e-01, -2.69195175e-01, -4.65247684e-01,
-3.29519024e-01, -3.59680949e-01, -4.42626241e-01,
-1.71168921e-01, -2.16411808e-01, -1.33466516e-01,
2.97321170e+00],
[ 2.10000000e-02, 3.00000000e-03, 4.20000000e-02,
2.60000000e-02, 8.00000000e-03, 4.00000000e-02,
1.80000000e-02, 2.00000000e-03, 2.10000000e-02,
9.00000000e-01],
[ 4.90000000e-02, 1.70000000e-02, 1.00000000e-01,
4.20000000e-02, 1.50000000e-02, 6.60000000e-02,
2.20000000e-02, 3.00000000e-03, 3.60000000e-02,
2.40000000e-02],
[ -4.11693485e-01, -4.11693485e-01, -6.17540227e-01,
-4.11693485e-01, -6.17540227e-01, -4.11693485e-01,
-2.05846742e-01, -2.05846742e-01, 4.11693485e-01,
2.88185439e+00],
[ 1.00000000e+00, 0.00000000e+00, 1.00000000e+00,
1.00000000e+00, 1.00000000e+00, 1.00000000e+00,
1.00000000e+00, 1.00000000e+00, 1.00000000e+00,
1.00000000e+00],
[ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00,
1.00000000e+00, 1.00000000e+00, 0.00000000e+00,
1.00000000e+00, 1.00000000e+00, 1.00000000e+00,
1.00000000e+00],
[ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00],
[ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00,
1.00000000e+00, 1.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00],
[ 9.00000000e-01, 2.50000000e-01, 9.00000000e-01,
3.00000000e-01, 3.00000000e-01, 9.50000000e-01,
9.00000000e-01, 9.00000000e-01, 4.00000000e-01,
4.00000000e-01],
[ 9.50000000e-01, 9.90000000e-01, 8.80000000e-01,
9.20000000e-01, 9.00000000e-01, 9.00000000e-01,
8.80000000e-01, 9.40000000e-01, 9.20000000e-01,
9.70000000e-01],
[ 2.00000000e-01, 0.00000000e+00, 1.00000000e+00,
0.00000000e+00, 0.00000000e+00, 1.00000000e+00,
0.00000000e+00, 0.00000000e+00, 3.00000000e-01,
4.00000000e-01],
[ -1.47709789e+00, -2.46182982e-01, 3.69274473e-01,
-2.46182982e-01, -1.47709789e+00, 9.84731928e-01,
3.69274473e-01, -8.61640437e-01, 9.84731928e-01,
1.60018938e+00]])
In [11]:
#np.savetxt('norm.csv',matrix,delimiter=',')
Коэффициенты функции полезности¶
In [20]:
koef=[0.0807,0.1242,-0.1056,-0.0869,0.0559,0.0683,0.0124,0.0434,0.1056,0.0435 , 0.0994,0.1118 ,-0.0621]
In [59]:
utility=[0,0,0,0,0,0,0,0,0,0]
for i in range(10):
for j in range(13):
utility[i]+=koef[j]*matrix[j][i]
#print('utility',utility[i])
#print('k',koef[j])
#print('m',matrix[j][i])
utility[i]=utility[i]*(-1)#max
utility
Out[59]:
[-0.27889920685818748,
-0.094060156592182725,
-0.29848659416122919,
-0.24785563456700921,
-0.30968760655253125,
-0.17469790237164323,
-0.15668844233406365,
-0.23600679171334915,
-0.17593927185088482,
-0.58117919299891918]
Построение диаграммы полезности продуктов¶
In [22]:
import matplotlib as mpl
import matplotlib.pyplot as plt
import math
%matplotlib inline
In [57]:
data_names=['CRC_c','CRC_p','APL_ntb','APL_bf','APL_p','REF_ntb','REF_bf','REF_p','AUT','MRG']
data_values=utility
y_pos=[]
for i in range(10):
y_pos.append(i*5)
plt.bar(y_pos,data_values,width=1.5,align='center',alpha=0.5)
plt.xticks(y_pos,data_names)
plt.ylabel('Utility')
plt.title('Utility of credit product')
plt.autoscale(True)
plt.show()
Прогнзирование спроса¶
In [58]:
data = pd.read_csv('py.csv',
sep=';', encoding='utf-8')
data=data.drop(['Unnamed: 0'], axis=1)
data
Out[58]:
201601 |
201602 |
201603 |
201604 |
201605 |
201606 |
201607 |
201608 |
201609 |
201610 |
... |
201710 |
201711 |
201712 |
201801 |
201802 |
201803 |
201804 |
201805 |
201806 |
201807 |
||
0 |
50 |
57 |
55 |
54 |
48 |
56 |
55 |
56 |
60 |
60 |
... |
74 |
75 |
90 |
98 |
99 |
98 |
100 |
108 |
101 |
123 |
|
1 |
1 |
4 |
9 |
8 |
2 |
5 |
6 |
8 |
12 |
8 |
... |
13 |
10 |
12 |
12 |
13 |
11 |
15 |
18 |
16 |
18 |
|
2 |
1328 |
1302 |
1300 |
1308 |
1320 |
1331 |
1322 |
1320 |
1333 |
1340 |
... |
1355 |
1360 |
1359 |
1345 |
1376 |
1380 |
1387 |
1370 |
1390 |
1400 |
|
3 |
371 |
405 |
398 |
388 |
361 |
370 |
378 |
381 |
392 |
371 |
... |
400 |
389 |
378 |
365 |
382 |
387 |
385 |
389 |
390 |
389 |
|
4 |
300 |
325 |
320 |
290 |
277 |
300 |
306 |
317 |
324 |
335 |
... |
324 |
300 |
310 |
266 |
315 |
311 |
310 |
320 |
329 |
310 |
|
5 |
1 |
3 |
6 |
3 |
0 |
6 |
15 |
21 |
20 |
17 |
... |
28 |
22 |
17 |
7 |
11 |
15 |
19 |
21 |
28 |
25 |
|
6 |
6 |
11 |
10 |
9 |
6 |
11 |
12 |
10 |
15 |
15 |
... |
9 |
10 |
7 |
4 |
7 |
6 |
5 |
6 |
9 |
9 |
|
7 |
6 |
12 |
13 |
10 |
8 |
9 |
10 |
9 |
11 |
12 |
... |
8 |
3 |
4 |
0 |
5 |
5 |
3 |
4 |
6 |
8 |
|
8 |
376 |
380 |
389 |
400 |
422 |
401 |
390 |
384 |
370 |
365 |
... |
336 |
328 |
320 |
295 |
327 |
333 |
320 |
344 |
326 |
330 |
|
9 |
168 |
172 |
170 |
164 |
163 |
156 |
159 |
154 |
150 |
157 |
... |
170 |
171 |
160 |
159 |
160 |
150 |
150 |
151 |
157 |
160 |
10 rows Ч 31 columns
In [60]:
data.columns
Out[60]:
Index(['201601', '201602', '201603', '201604', '201605', '201606', '201607',
'201608', '201609', '201610', '201611', '201612', '201701', '201702',
'201703', '201704', '201705', '201706', '201707', '201708', '201709',
'201710', '201711', '201712', '201801', '201802', '201803', '201804',
'201805', '201806', '201807'],
dtype='object')
In [61]:
data.index = ['CRC_classic','CRC_premium','APL_New-to-bank','APL Bona-fide','APL Payroll',
'REF New-to-bank','REF Bona-fide','REF Payroll','AUT','MRG']
data
Out[61]:
201601 |
201602 |
201603 |
201604 |
201605 |
201606 |
201607 |
201608 |
201609 |
201610 |
... |
201710 |
201711 |
201712 |
201801 |
201802 |
201803 |
201804 |
201805 |
201806 |
201807 |
||
CRC_classic |
50 |
57 |
55 |
54 |
48 |
56 |
55 |
56 |
60 |
60 |
... |
74 |
75 |
90 |
98 |
99 |
98 |
100 |
108 |
101 |
123 |
|
CRC_premium |
1 |
4 |
9 |
8 |
2 |
5 |
6 |
8 |
12 |
8 |
... |
13 |
10 |
12 |
12 |
13 |
11 |
15 |
18 |
16 |
18 |
|
APL_New-to-bank |
1328 |
1302 |
1300 |
1308 |
1320 |
1331 |
1322 |
1320 |
1333 |
1340 |
... |
1355 |
1360 |
1359 |
1345 |
1376 |
1380 |
1387 |
1370 |
1390 |
1400 |
|
APL Bona-fide |
371 |
405 |
398 |
388 |
361 |
370 |
378 |
381 |
392 |
371 |
... |
400 |
389 |
378 |
365 |
382 |
387 |
385 |
389 |
390 |
389 |
|
APL Payroll |
300 |
325 |
320 |
290 |
277 |
300 |
306 |
317 |
324 |
335 |
... |
324 |
300 |
310 |
266 |
315 |
311 |
310 |
320 |
329 |
310 |
|
REF New-to-bank |
1 |
3 |
6 |
3 |
0 |
6 |
15 |
21 |
20 |
17 |
... |
28 |
22 |
17 |
7 |
11 |
15 |
19 |
21 |
28 |
25 |
|
REF Bona-fide |
6 |
11 |
10 |
9 |
6 |
11 |
12 |
10 |
15 |
15 |
... |
9 |
10 |
7 |
4 |
7 |
6 |
5 |
6 |
9 |
9 |
|
REF Payroll |
6 |
12 |
13 |
10 |
8 |
9 |
10 |
9 |
11 |
12 |
... |
8 |
3 |
4 |
0 |
5 |
5 |
3 |
4 |
6 |
8 |
|
AUT |
376 |
380 |
389 |
400 |
422 |
401 |
390 |
384 |
370 |
365 |
... |
336 |
328 |
320 |
295 |
327 |
333 |
320 |
344 |
326 |
330 |
|
MRG |
168 |
172 |
170 |
164 |
163 |
156 |
159 |
154 |
150 |
157 |
... |
170 |
171 |
160 |
159 |
160 |
150 |
150 |
151 |
157 |
160 |
10 rows Ч 31 columns
Временной ряд для каждого продукта¶
In [62]:
fig, axes = plt.subplots(nrows=5, ncols=2, figsize=(13,15))
p1=data.loc['CRC_classic'].plot(ax=axes[0,0])
p1.title.set_text('CRC_classic')
p2=data.loc['CRC_premium'].plot(ax=axes[0,1])
p2.title.set_text('CRC_premium')
p3=data.loc['APL_New-to-bank'].plot(ax=axes[1,0])
p3.title.set_text('APL_New-to-bank')
p4=data.loc['APL Bona-fide'].plot(ax=axes[1,1])
p4.title.set_text('APL Bona-fide')
p5=data.loc['APL Payroll'].plot(ax=axes[2,0])
p5.title.set_text('APL Payroll')
p6=data.loc['REF New-to-bank'].plot(ax=axes[2,1])
p6.title.set_text('REF New-to-bank')
p7=data.loc['REF Bona-fide'].plot(ax=axes[3,0])
p7.title.set_text('REF Bona-fide')
p8=data.loc['REF Payroll'].plot(ax=axes[3,1])
p8.title.set_text('REF Payroll')
p9=data.loc['AUT'].plot(ax=axes[4,0])
p9.title.set_text('AUT')
p10=data.loc['MRG'].plot(ax=axes[4,1])
p10.title.set_text('MRG')
fig.tight_layout()
Определяем равномерность распределения¶
In [63]:
fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(15,8))
p1=data.loc['CRC_classic'].hist(ax=axes[0,0],normed=1)
p1.title.set_text('CRC_classic')
p2=data.loc['CRC_premium'].hist(ax=axes[0,1],normed=1)
p2.title.set_text('CRC_premium')
p3=data.loc['APL_New-to-bank'].hist(ax=axes[0,2],normed=1)
p3.title.set_text('APL_New-to-bank')
p4=data.loc['APL Bona-fide'].hist(ax=axes[0,3],normed=1)
p4.title.set_text('APL Bona-fide')
p5=data.loc['APL Payroll'].hist(ax=axes[0,4],normed=1)
p5.title.set_text('APL Payroll')
p6=data.loc['REF New-to-bank'].hist(ax=axes[1,0],normed=1)
p6.title.set_text('REF New-to-bank')
p7=data.loc['REF Bona-fide'].hist(ax=axes[1,1],normed=1)
p7.title.set_text('REF Bona-fide')
p8=data.loc['REF Payroll'].hist(ax=axes[1,2],normed=1)
p8.title.set_text('REF Payroll')
p9=data.loc['AUT'].hist(ax=axes[1,3],normed=1)
p9.title.set_text('AUT')
p10=data.loc['MRG'].hist(ax=axes[1,4],normed=1)
p10.title.set_text('MRG')
fig.tight_layout()
In [64]:
from sklearn.metrics import mean_absolute_error, mean_squared_error
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt
import statsmodels.api as sm
import scipy.stats as scs
from scipy.optimize import minimize
Кэффициент вариации:¶
Определяем степень разброса данных
In [65]:
products=['CRC_classic','CRC_premium','APL_New-to-bank','APL Bona-fide','APL Payroll',
'REF New-to-bank','REF Bona-fide','REF Payroll','AUT','MRG']
In [66]:
itog=[]
for i in range(10):
itog.append(data.loc[products[i]].describe())
In [67]:
for i in range(10):
print (products[i], itog[i]['std']/itog[i]['mean'])
CRC_classic 0.27418111848
CRC_premium 0.563354728412
APL_New-to-bank 0.0211166099966
APL Bona-fide 0.032193358021
APL Payroll 0.0526999065368
REF New-to-bank 0.553306156971
REF Bona-fide 0.343041348328
REF Payroll 0.454275170445
AUT 0.0838401397794
MRG 0.0468466908553
Прооверим нормальность распределения¶
Проведем тест Харки -- Бера для определения номарльности распределения, чтобы подтвердить предположение об однородности.
In [68]:
import statsmodels.api as sm
from statsmodels.iolib.table import SimpleTable
In [69]:
row = [u'JB', u'p-value', u'skew', u'kurtosis']
for i in range(10):
jb_test = sm.stats.stattools.jarque_bera(data.loc[products[i]])
a = np.vstack([jb_test])
itog = SimpleTable(a, row)
print (products[i])
print (itog)
print('\n\n')
CRC_classic
==========================================================
JB p-value skew kurtosis
----------------------------------------------------------
4.80426400028 0.0905247486296 0.959038149391 2.79896889341
----------------------------------------------------------
CRC_premium
==========================================================
JB p-value skew kurtosis
----------------------------------------------------------
1.0336411826 0.596413779858 0.00325938071753 2.10546333744
----------------------------------------------------------
APL_New-to-bank
=========================================================
JB p-value skew kurtosis
---------------------------------------------------------
2.48526212961 0.288623830062 0.598630534314 2.29954312028
---------------------------------------------------------
APL Bona-fide
===========================================================
JB p-value skew kurtosis
-----------------------------------------------------------
0.825730025302 0.661751604894 -0.173808223268 2.27997384464
-----------------------------------------------------------
APL Payroll
==========================================================
JB p-value skew kurtosis
----------------------------------------------------------
3.31729364867 0.190396445701 -0.775864883357 3.40045233424
----------------------------------------------------------
REF New-to-bank
==========================================================
JB p-value skew kurtosis
----------------------------------------------------------
1.17082249196 0.556876801369 -0.127499104726 2.08271098733
----------------------------------------------------------
REF Bona-fide
=========================================================
JB p-value skew kurtosis
---------------------------------------------------------
0.973776539957 0.614535691195 0.365389811195 2.5311155171
---------------------------------------------------------
REF Payroll
===========================================================
JB p-value skew kurtosis
-----------------------------------------------------------
0.879132381289 0.644315870717 -0.159863950047 2.23947867376
-----------------------------------------------------------
AUT
========================================================
JB p-value skew kurtosis
--------------------------------------------------------
1.83384570995 0.39974723066 0.568732574947 2.64514150686
--------------------------------------------------------
MRG
=========================================================
JB p-value skew kurtosis
---------------------------------------------------------
2.21627862465 0.330172738218 0.362760903795 1.90938241379
---------------------------------------------------------
Проверим ряды на стационарность¶
In [70]:
for i in range(10):
print(products[i])
test = sm.tsa.adfuller(data.loc[products[i]])
print ('adf: ', test[0])
print ('p-value: ', test[1])
print('Critical values: ', test[4])
if test[0]> test[4]['5%']:
print ('есть единичные корни, ряд не стационарен')
else:
print ('единичных корней нет, ряд стационарен')
print('\n\n')
CRC_classic
adf: 1.682677573
p-value: 0.998085584153
Critical values: {'1%': -3.6790595944893187, '10%': -2.6231583472057074, '5%': -2.9678817237279103}
есть единичные корни, ряд не стационарен
CRC_premium
adf: -1.66441828184
p-value: 0.449532145536
Critical values: {'1%': -3.6699197407407405, '10%': -2.6211711111111109, '5%': -2.9640707407407407}
есть единичные корни, ряд не стационарен
APL_New-to-bank
adf: -0.371557565651
p-value: 0.914740432243
Critical values: {'1%': -3.6699197407407405, '10%': -2.6211711111111109, '5%': -2.9640707407407407}
есть единичные корни, ряд не стационарен
APL Bona-fide
adf: -3.41750802218
p-value: 0.0103763086749
Critical values: {'1%': -3.6699197407407405, '10%': -2.6211711111111109, '5%': -2.9640707407407407}
единичных корней нет, ряд стационарен
APL Payroll
adf: -3.73837944847
p-value: 0.00360458018575
Critical values: {'1%': -3.6699197407407405, '10%': -2.6211711111111109, '5%': -2.9640707407407407}
единичных корней нет, ряд стационарен
REF New-to-bank
adf: -0.750923683948
p-value: 0.83311472217
Critical values: {'1%': -3.7883858816542486, '10%': -2.6463967573696143, '5%': -3.0130977475434619}
есть единичные корни, ряд не стационарен
REF Bona-fide
adf: -3.10509899654
p-value: 0.0261781339676
Critical values: {'1%': -3.6699197407407405, '10%': -2.6211711111111109, '5%': -2.9640707407407407}
единичных корней нет, ряд стационарен
REF Payroll
adf: -2.73081752261
p-value: 0.0688556149036
Critical values: {'1%': -3.6889256286443146, '10%': -2.6252957653061224, '5%': -2.9719894897959187}
есть единичные корни, ряд не стационарен
AUT
adf: -2.28018316037
p-value: 0.178438967379
Critical values: {'1%': -3.7697326258452288, '10%': -2.6425009917355373, '5%': -3.0054255371900829}
есть единичные корни, ряд не стационарен
MRG
adf: -3.27080918743
p-value: 0.0162348062679
Critical values: {'1%': -3.6996079738860943, '10%': -2.6276010013717421, '5%': -2.9764303469999494}
единичных корней нет, ряд стационарен
Стационарные ряды: APL Bona-fide, APL Payroll, REF Bona-fide, MRG¶
Прогнозирование спроса. Аппроксимация¶
In [71]:
from pylab import *
Двойное экспоненциальное сглаживание¶
In [72]:
def double_exponential_smoothing(series, alpha, beta):
result = [series[0]]
for n in range(1, len(series)+1):
if n == 1:
level, trend = series[0], series[1] - series[0]
if n >= len(series): # прогнозируем
value = result[-1]
else:
value = series[n]
last_level, level = level, alpha*value + (1-alpha)*(level+trend)
trend = beta*(level-last_level) + (1-beta)*trend
result.append(level+trend)
return result
In [106]:
fig, axes = plt.subplots(nrows=5, ncols=2, figsize=(20,20))
for i in range (10):
with plt.style.context('seaborn-white'):
#plt.figure(figsize=(20, 8))
subplot(5,2,i+1)
for alpha in [0.8, 0.2]:
for beta in [0.8, 0.2]:
plt.plot(double_exponential_smoothing(data.loc[products[i]], alpha, beta),label="Alpha {}, beta {}".format(alpha, beta))
plt.plot( data.loc[products[i]].values,label = "Actual")
plt.legend(loc="best")
plt.axis('tight')
plt.title(products[i])
plt.grid(True)
In [107]:
size=0
size=len(double_exponential_smoothing(data.loc[products[0]], 0.9, 0.9))
n=0
E1=[]
E2=[]
E3=[]
E4=[]
n=1/(size-1)
sum=0
for alpha in [0.8, 0.2]:
for beta in [0.8, 0.2]:
for j in range (10):
sum=0
for i in range(size-2):
sum+=abs((double_exponential_smoothing(data.loc[products[j]], alpha, beta)[i]-data.loc[products[j]][i])/
double_exponential_smoothing(data.loc[products[j]], alpha, beta)[i])
print('Error of ',products[j],' = ',n*sum*100)
if beta==0.8 and alpha==0.8:
E1.append(n*sum*100)
if beta==0.2 and alpha==0.8:
E2.append(n*sum*100)
if beta==0.8 and alpha==0.2:
E3.append(n*sum*100)
if beta==0.2 and alpha==0.2:
E4.append(n*sum*100)
print('\n')
#print('size=',size)
Error of CRC_classic = 3.30251549936
Error of CRC_premium = 46.7470313675
Error of APL_New-to-bank = 0.525178474408
Error of APL Bona-fide = 1.82215058554
Error of APL Payroll = 2.94001014563
Error of REF New-to-bank = 69.1807382017
Error of REF Bona-fide = 49.757994668
Error of REF Payroll = 66.9878762042
Error of AUT = 1.97249732776
Error of MRG = 1.51270674362
Error of CRC_classic = 3.61884166237
Error of CRC_premium = 19.3101001234
Error of APL_New-to-bank = 0.482255813541
Error of APL Bona-fide = 1.68007714419
Error of APL Payroll = 1.83846478384
Error of REF New-to-bank = 13.2227246964
Error of REF Bona-fide = 10.8600304859
Error of REF Payroll = 16.9211139523
Error of AUT = 0.987757839355
Error of MRG = 0.859134382699
Error of CRC_classic = 6.80168902345
Error of CRC_premium = 285.503253167
Error of APL_New-to-bank = 1.72642612855
Error of APL Bona-fide = 5.37909223795
Error of APL Payroll = 5.919510722
Error of REF New-to-bank = 41.8100947582
Error of REF Bona-fide = 29.1129118159
Error of REF Payroll = 59.5269211498
Error of AUT = 5.20549265167
Error of MRG = 3.69185598165
Error of CRC_classic = 10.9792105307
Error of CRC_premium = 36.3445567556
Error of APL_New-to-bank = 2.06305307536
Error of APL Bona-fide = 8.37501129233
Error of APL Payroll = 8.63910395489
Error of REF New-to-bank = 28.9571251889
Error of REF Bona-fide = 42.8035357021
Error of REF Payroll = 86.5773552974
Error of AUT = 4.08897850877
Error of MRG = 4.89097738854
In [114]:
E=[E1,E2,E3,E4]
predict=[]
al=[]
al1=[]
min_e=[100,100,100,100,100,100,100,100,100,100]
for i in range(10):
for j in range(4):
if E[j][i]<=min_e[i]:
min_e[i]=E[j][i]
al1.append(j)
al.append(al1[-1])
for j in range(10):
if al[j]==0:
predict.append(double_exponential_smoothing(data.loc[products[j]], 0.8, 0.8)[size-1])
if al[j]==1:
predict.append(double_exponential_smoothing(data.loc[products[j]], 0.8, 0.2)[size-1])
print('Koefficients: ',al,'\n')
print('Predict vector for all products:\n')
for i in range(10):
print(products[i],': ', round(predict[i]),'\n')
Koefficients: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Predict vector for all products:
CRC_classic : 143.0
CRC_premium : 20.0
APL_New-to-bank : 1410.0
APL Bona-fide : 391.0
APL Payroll : 315.0
REF New-to-bank : 29.0
REF Bona-fide : 10.0
REF Payroll : 9.0
AUT : 330.0
MRG : 160.0
Оптимизация¶
In [76]:
from scipy.optimize import linprog
import time
Спрос¶
In [152]:
b7=[]
for i in range(10):
b7.append(round(predict[i]*avg_sum[i]*TR[i]))
b7
Out[152]:
[10296346.0,
2441869.0,
304606803.0,
49296834.0,
35878600.0,
7318848.0,
5507952.0,
4458164.0,
89787251.0,
307398483.0]
Digital¶
In [79]:
d=[0, 0,-0.1,-0.1,-0.1, 0, 0, 0, 0, 0]
d
Out[79]:
[0, 0, -0.1, -0.1, -0.1, 0, 0, 0, 0, 0]
'''[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,0,0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0],[0,0,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,0,1],'''
'''b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,'''
,ntb_h,ntb_l,d b1...,b4,b5,b6
In [80]:
ntb_l=[0,0,0,0,0,0,0,0,0,0]
for i in range(10):
ntb_l[i]=ratio_ntb[i]*(-1)
print(ntb_l)
[-0.20000000000000001, -0.0, -1.0, -0.0, -0.0, -1.0, -0.0, -0.0, -0.29999999999999999, -0.40000000000000002]
koef= [[1,0,0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,1,0,0,0,0],[0,0,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,0,1]]
Ограничения¶
In [149]:
b1=-41000000
b2=-500000
b3= 13023000 #13022400
b4=-123000000 #108000000
b5= 184500000
b6=-11800000 #18800000
In [150]:
start = time.time()
A_ub = [[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,0,0,0,0,0],[0,-1,0,0,0,0,0,0,0,0],
[0,0,-1,0,0,0,0,0,0,0],[0,0,0,-1,0,0,0,0,0,0],[0,0,0,0,-1,0,0,0,0,0],
[0,0,0,0,0,-1,0,0,0,0],[0,0,0,0,0,0,-1,0,0,0],[0,0,0,0,0,0,0,-1,0,0],
[0,0,0,0,0,0,0,0,-1,0],[0,0,0,0,0,0,0,0,0,-1],d30_6,ntb_l,ratio_ntb,d,[1,0,0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0,0],
[0,0,1,0,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0],[0,0,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,0,1]] # матрица А для ограничений
b_ub = [b1,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b3,b4,b5,b6
,b7[0],b7[1],b7[2],b7[3],b7[4],b7[5],b7[6],b7[7],b7[8],b7[9]] # вектор b для ограничений
res=linprog(utility, A_ub, b_ub,method='simplex', options={"disp":True})
print (res)
stop = time.time()
print ("Время :")
print(stop - start)
Optimization terminated successfully.
Current function value: -197912782.819189
Iterations: 18
fun: -197912782.81918931
message: 'Optimization terminated successfully.'
nit: 18
slack: array([ 3.66801493e+08, 3.53678255e+07, 1.04890010e+07,
1.97441685e+06, 4.83943900e+07, 3.21169075e+07,
0.00000000e+00, 5.64167926e+06, 7.06781272e+06,
0.00000000e+00, 8.84511498e+07, 3.52919118e+07,
2.61321745e+07, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00])
status: 0
success: True
x: array([ 5.00000000e+05, 5.00000000e+05, 3.64887024e+07,
4.88943900e+07, 3.26169075e+07, 5.00000000e+05,
5.00000000e+05, 7.56781272e+06, 5.00000000e+05,
2.79733680e+08])
Время :
0.09899067878723145
In [151]:
answer=[]
print('Target production\n')
for i in range(10):
answer.append(res.x[i])
print(products[i],': ',round(res.x[i]))
Target production
CRC_classic : 500000.0
CRC_premium : 500000.0
APL_New-to-bank : 36488702.0
APL Bona-fide : 48894390.0
APL Payroll : 32616908.0
REF New-to-bank : 500000.0
REF Bona-fide : 500000.0
REF Payroll : 7567813.0
AUT : 500000.0
MRG : 279733680.0
Размещено на Allbest.ru
...Подобные документы
Концепция оценки рисков розничного кредитования. Исследование возможности уменьшения кредитных рисков банка посредством использования системы поддержки принятия решений, основанной на базе прецедентов. Разработка структуры интеллектуальной системы.
диссертация [4,6 M], добавлен 11.04.2014Принципы построения организационных структур, их классификация и этапы исторического развития. Интеллектуальный анализ данных. Оценка системы поддержки принятия решений. Разработка СППР в управлении деятельностью территориальных учреждений Банка России.
курсовая работа [1,1 M], добавлен 25.05.2015Функции и эволюция систем поддержки принятия решений, их отличие от экспертных систем. Классификация СППР по взаимодействию с пользователем, способу поддержки, сфере использования. Интерфейс пользователя и база знаний. Стратегические и оперативные модели.
презентация [125,8 K], добавлен 16.04.2015Общая схема моделирования экономических систем. Понятие о когнитивных моделях, их виды. Задачи рационального выбора. Общая постановка многокритериальной задачи. Ситуационные комнаты и центры как развитие концепции системы поддержки принятия решений.
курс лекций [124,9 K], добавлен 30.05.2014Основные понятия теории принятия решений. Формализация задач принятия решений. Однокритериальные и многокритериальные задачи в условиях определенности. Методы оценки многокритериальных альтернатив. Методы построения аддитивной функции полезности.
дипломная работа [2,9 M], добавлен 08.07.2014Назначение и краткая характеристика систем поддержки принятия решений. Концепции и принципы теории принятия решений. Получение информации, критерии принятия решений и их шкалы. Схема классификации возможных источников и способов получения информации.
курсовая работа [132,5 K], добавлен 14.02.2011Анализ некоторых информационных технологий поддержки принятия управленческих решений. OLAP (Online Analytical Processing) - удобный инструмент анализа. Продукты Peoplesoft EPM. Программное средство для бюджетирования. Децентрализованное планирование.
реферат [241,3 K], добавлен 14.06.2010Выбор планшетного ПК. Методы решения задач принятия решений в условиях неопределенности. Разработка математического обеспечения поддержки принятия решений на основе реализации стандартных и модифицированных алгоритмов теории исследования операций.
курсовая работа [5,9 M], добавлен 22.01.2016Система управления как система принятия решений, роль принятия решений в системе управления. Схема принятия решений и ее значение для эффективного функционирования подразделений. Совершенствование действующей схемы принятия решений.
курсовая работа [21,2 K], добавлен 26.10.2003Классификация информационных систем в управлении. Связь между управлением и информацией. Структура и пути совершенствования системы с управлением. Модель принятия решений Г. Саймона. Сущность, компоненты и виды систем поддержки принятия решений.
реферат [643,7 K], добавлен 19.05.2010Использование методов комбинаторно-морфологического анализа и синтеза рациональных систем в подготовке принятия управленческих решений. Специфика принятия решений в государственных органах власти. Методы принятия решения в условиях неопределенности.
контрольная работа [40,0 K], добавлен 13.11.2010Подход к управлению как к науке и искусству. Общие сведения о теории принятия решений. Постулаты теории принятия оптимального решения. Классы утверждений психологической теории решений. Методы психологических исследований процессов принятия решений.
реферат [26,2 K], добавлен 07.12.2010Сущность управленческих решений, их классификация и типология. Процесс принятия решений, принципы и этапы. Анализ процесса принятия управленческих решений в ООО "Бытовая техника". Пути повышения эффективности принятия решений в деятельности предприятия.
курсовая работа [73,7 K], добавлен 26.01.2015Рассмотрение понятия и сущности управленческого решения. Определение основных этапов и методов принятия решений менеджером. Анализ системы принятия управленческих решений на предприятии ООО "ПРИЗ-С"; рекомендации по совершенствованию данного процесса.
курсовая работа [41,0 K], добавлен 20.04.2015Основные методы принятия управленческих решения. Коллективные методы обсуждения и принятия решений. Эвристические и количественные методы принятия решения. Анализ как составная часть процесса принятия решения. Методы анализа управленческих решений.
курсовая работа [38,6 K], добавлен 23.06.2010Содержание, виды и типы управленческих решений. Процесс и методы принятия решений в мировой практике. Анализ принятия управленческих решений в сети ресторанов "Madyar Collection". Комплекс мероприятий по повышению качества системы принятия решений.
дипломная работа [426,7 K], добавлен 06.01.2016Практическое применение управленческих информационных систем на торговом предприятии. Информационное обеспечение поддержки принятия решений в контексте развития систем управления. Разработка и использование в компаниях современных программных продуктов.
курсовая работа [50,6 K], добавлен 29.06.2016Принятие решений - составная часть любой управленческой функции. Методология и процесс принятия решения в организации. Анализ и формальные процедуры методики принятия управленческих решений в ТК "Петрович". Общая характеристика организации и анализ целей.
курсовая работа [481,9 K], добавлен 13.02.2012Исследование роли управленческих решений, их классификация. Модели и этапы принятия управленческих решений. Особенности разделения труда в процессе принятия решений. Оценка среды принятия решений и рисков, методы прогнозирования для принятия решений.
курсовая работа [233,1 K], добавлен 15.05.2019Определение целей и системы ценностей предприятия. Необходимость, техника и методы принятия решений. Этапы разработки управленческих решений. Разработка управленческого решения методом коллективного генерирования идей. Основные принципы прогнозирования
курсовая работа [62,2 K], добавлен 22.02.2009