Разработка многокритериальных систем поддержки принятия решений в бизнесе

Изучение системы поддержки принятия решений и анализ их применения в банковском бизнесе. Разработка системы поддержки принятия решения, которая будет выдавать оптимальный объем выдачи каждого из кредитных продуктов в зависимости от желаемых целей.

Рубрика Менеджмент и трудовые отношения
Вид дипломная работа
Язык русский
Дата добавления 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

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