Глава 1.10 Нейронные модели в управлении финансовыми рисками на примере банков

Для начала хочется вспомнить знаменитое в 19-м веке высказывание фон Тюнена:

"…Если бы в других отраслях знаний существовало такое же отвращение к математическому анализу, как в политической экономии, то мы остались бы в совершенном неведении относительно важнейших законов природы…".

Прошло более 100 лет, а картина практически не изменилась:

Большинство экономистов продолжают оперировать категориями типа "я думаю", "я чувствую" и т.д. Или того хуже появилась другая группа – "горе математиков в экономике" (многие из которых стали нобелевскими лауреатами по экономике), которые бездумно "притягивают за уши" математику, статистику к экономике, не задумываясь о многообразии ограничений, в том числе начальных и граничных условий.

Вот почему авторы посчитали необходимым поделиться с этими двумя группами "горе экономистов" своими методиками, постановкой задач и конкретными алгоритмами.

Предложенная авторами методика расчета рисков на основе нейронных моделей может эффективно применяться для оценки деятельности любых хозяйствующих субъектов, а не только для финансовых учреждений типа банк.

Посмотреть видео ролики "Анализ и оценка отраслевых, рыночных рисков, эффективности".

Давайте ответим на простой вопрос какова Цель нашего исследования, или проще для чего мы все это делаем?

И на самом деле существуют мощнейшие Центробанки, Минфины развитых стран, в том числе США, рейтинговые, аналитические, аудиторские компании, экономические ВУЗы мирового уровня. Они формируют, владеют, имеют доступ к огромным базам на всех микро, мезо, макро уровнях экономики - воистину с бесконечным количеством данных, вооружены самыми совершенными теориями и методиками, а результат смешной - регулярно пропускали, пропускают, и будут пропускать все кризисы.

Обратите внимание: все кризисы ими были пропущены, поэтому и были для них неожиданными.

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

Поэтому все то, что приводится ниже, является аксиомами методики авторов:

Попытаемся разобраться с этими "сложнейшими" для многих экономистов расчетами, и что, самое главное, попытаемся получить результаты, которые многим недоступны и/или просто не грезились.

Итак, займемся этими элементами методики авторов, которых строятся на трех шаговом алгоритме.

Постановка задачи для построения моделей рисков, эффективности...

Вернемся еще раз к цели нашей работы: необходимо дать оценку рисков банка, через оценку рисков их клиентов и/или их отраслевых групп. Данный подход очевиден — именно клиенты определяют устойчивость, риски банка, а не наоборот, конечно, при условии профессионализма персонала банка. К сожалению, у банкиров это достаточно редкое явление. Последний кризис 2008-2010 г.г. это очередной раз доказал. Это результат непонимания банками того факта, что клиенты формируют доходы банка, а не наоборот. Предложенная в работе методика убедительно, подчеркнем, на цифрах, моделях, а не на основе виртуальных концепций, это доказывает.

Приведем пример для построения моделей рисков, эффективности....

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

Представленный алгоритм практически не обращает никакого внимания на тот факт, что исходные данные как бы статистически размыты. Алгоритм совершенно не интересует факт размытости, при любых вариантах он все равно проведет среднюю эталонную линию, для исследуемого i-го фактора для каждого предприятия той или иной отрасли.

Данный момент требует пояснения

В основу методик авторов положены базовые идеи теории размытых множеств, пространств, хаоса и нейронных сетей. Этот авторский подход принципиально отличается от классической статистики и ее приложения эконометрики. При этом авторами активным образом используется наработанный инструментарий, при условии, что он не противоречит идеологическому вектору теории размытых множеств, пространств, хаоса и нейронных сетей. Конечно, должно соблюдаться еще одно самое важное условие – если метод прост для понимания, то и алгоритм можно описать на раз, два, три шага. Вот почему материал целенаправленно излагается на уровне знаний не выше 7-го класса школы. При этом результат авторских методик, моделей превосходит по эффективности всю сложность, запутанность в изложении классических эконометрических подходов. Главное в авторских подходах, максимально быстро и просто достигнуть поставленной цели, позволяет дать объективную оценку рисков банка, а это, возможно, только через оценку рисков их клиентов и их отраслевых групп, но не наоборот, как того требуют Центральные Банки развитых стран. Эффективность их методик должна определять реальная экономика.

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

Логика проста, если риски у предприятия, которое является клиентом банка, низкие, то при любых потрясениях на рынке предприятия его денежные потоки через банк будут подвержены незначительному снижению и наоборот.

Таким образом, контролируя и оценивая денежные потоки предприятия, аналитические службы банка и определяют свои риски и далее потенциальные ежедневные остатки на банковских счетах этого предприятия. Вариация, потенциальное, прогнозируемое колебание ежедневных остатков на банковских счетах каждого предприятия и будет определять суммарный, интегральный ежедневный денежный потенциал депозитного портфеля банка. В свою очередь интегральный ежедневный денежный потенциал депозитного портфеля банка будет формировать ежедневный денежный потенциал кредитного портфеля банка.

Рождение метода Монте-Карло

Сначала Энрико Ферми в 1930-х годах в Италии, а затем Джон фон Нейман и Станислав Улам в 1940-х в Лос-Аламосе (ядерный центр в США) предположили использовать связь между стохастическими процессами и дифференциальными уравнениями "в обратную сторону". Они предложили использовать стохастический подход для аппроксимации многомерных интегралов в уравнениях переноса, возникших в связи с задачей о движении нейтрона в изотропной среде.

Идея была развита Уламом, который, по иронии судьбы, также как и Фокс боролся с вынужденным бездельем во время выздоровления после болезни, и, раскладывая пасьянсы, задался вопросом, какова вероятность того, что пасьянс "сложится". Ему в голову пришла идея, что вместо того, чтобы использовать обычные для подобных задач соображения комбинаторики, можно просто поставить "эксперимент" большое число раз и, таким образом, подсчитав число удачных исходов, оценить их вероятность. Он же предложил использовать компьютеры для расчётов методом Монте-Карло.

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

Годом рождения метода Монте-Карло считается 1949 год, когда в свет выходит статья Метрополиса и Улама "Метод Монте-Карло". Название метода происходит от названия города в княжестве Монако, широко известного своими многочисленными казино, поскольку именно рулетка является одним из самых широко известных генераторов случайных чисел. Станислав Улам пишет об этом в своей автобиографии "Приключения математика". Название было предложено Николасом Метрополисом в честь его дяди, который был азартным игроком.

Генерация экспериментальных экономических выборок с помощью сплайн аппроксимации и метода Монте-Карло. Модели и алгоритмы

Посмотреть видео ролики "Анализ и оценка отраслевых, рыночных рисков, эффективности".

Идея метода Монте-Карло опирается на тот факт, что экономист в своей повседневной деятельности вынужден исследовать практически бесконечное множество процессов реальной экономики. И что, самое важное, - все эти процессы исключительно индивидуальны, и, как следствие, определяются своими оригинальными статистическими функциями распределения.

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

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

Приведем пример только одной из классической статистической функции из известных пар десятков функций. f(x) - плотность распределения случайной величины по закону Фишера, вычисляется по формуле:

В ней Г(z) – гамма-функция, или интеграл Эйлера, который можно представить в следующем виде:

В свою очередь Гамма-функция может быть описана с помощью формулы Эйлера:

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

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

Метод Монте-Карло в состоянии моделировать бесконечное множество любых процессов реальной экономики на основании не абстрактных десяти статистических моделей с массой ограничений, а моделей полностью соответствующих собранным экономистом статистических данных того или иного экономического фактора и/или переменной, и/или процесса.

Сравним трудовые затраты экономиста при использовании классического метода и метода Монте-Карло

При классическом методе экономисту необходимо реализовать следующий алгоритм:

В методе Монте-Карло данный алгоритм обработки данных просто исключается, как следствие трудовые затраты, финансирование, время этого этапа по сравнению с классическим методом равны нулю. В результате точность, скорость обработки многократно превосходит классический метод. Мало того, тестовые сравнительные испытания авторов показали, что при генерировании выборки десятка классических вероятностных функций распределения и их интегралов вероятности алгоритм метода Монте-Карло работает значительно быстрее.

Ниже приведен пример статистического генератора.

'Генератор RND СтатМассива Yi факторов
Function GeneratorRND_MassYi(vecX As MatrixRec, StatMassYi As MatrixRec) As MatrixRec
'
Dim A As Double 'Нижний предел RND
Dim B As Double 'Верхний предел RND
Dim Ai As Double 'Нижний предел RND
Dim Bi As Double 'Верхний предел RND
Dim K As Double 'Угол наклона функции
Dim Yi As Double 'Нижний предел RND
Dim Xi As Double 'Нижний предел RND
Dim rowI As Long 'Строка массива Yi RND
Dim colI As Long 'Колонка массива Yi RND
'
Dim MassRnd_Yi As MatrixRec 'Генератор RND СтатМассива Yi факторов
'
' Создать матрицу
MassRnd_Yi = CreateMatrix(vecX.MatrixRow, StatMassYi.MatrixRow) ' Массив исходных статданных факторов Yi
'
' Генератор RND СтатМассива Yi факторов
With MassRnd_Yi
'
For colI = 1 To StatMassYi.MatrixRow
For rowI = 1 To vecX.MatrixRow
Select Case colI
Case 3 ' Расчет Фактора Прибыль Y3=X-Y1-Y2
.MatrixArray(rowI, colI) = vecX.MatrixArray(rowI, 1) - .MatrixArray(rowI, 1) - .MatrixArray(rowI, 2)
Case 4 ' Расчет Фактора Чистая Прибыль Y4=Y3(1-18%)
.MatrixArray(rowI, colI) = .MatrixArray(rowI, 3) * (1 - StatMassYi.MatrixArray(colI, 1))
Case 8 ' Расчет Фактора Всего Об.Средства Y8=Y5+Y6+Y7
.MatrixArray(rowI, colI) = .MatrixArray(rowI, 5) + .MatrixArray(rowI, 6) + .MatrixArray(rowI, 7)
Case 10 ' Расчет Фактора Всего Активы Y10=Y8+Y9
.MatrixArray(rowI, colI) = .MatrixArray(rowI, 8) + .MatrixArray(rowI, 9)
Case 13 ' Расчет Фактора Всего текущие обязательства Y13=Y11+Y12
.MatrixArray(rowI, colI) = .MatrixArray(rowI, 11) + .MatrixArray(rowI, 12)
Case 15 ' Расчет Фактора Капитал Y15=Y10-Y13-Y14
.MatrixArray(rowI, colI) = .MatrixArray(rowI, 10) - .MatrixArray(rowI, 13) - .MatrixArray(rowI, 14)
Case Else ' Расчет Фактора Капитал Y15
K = StatMassYi.MatrixArray(colI, 1) ' Угол наклона функции
A = StatMassYi.MatrixArray(colI, 2) ' Min Нижний предел RND
B = StatMassYi.MatrixArray(colI, 3) ' Max Верхний предел RND
Yi = vecX.MatrixArray(rowI, 1) ' Получить Значение Объема продаж
Ai = Yi * K * (-A) ' Нижний предел Xi
Bi = Yi * K * B ' Верхний предел Xi
Xi = Yi * K ' Угол наклона функции
MassRnd_Yi.MatrixArray(rowI, colI) = Xi + RndUniForm(Ai, Bi) ' Генерация RND
End Select
'
Next rowI
Next colI
'
End With
'
GeneratorRND_MassYi = MassRnd_Yi
'
' !!!!!!!!! ТЕСТ Модуля - закомментировать после проверки
''' Dim MassYi As MatrixRec ' ТЕСТ Массив исходных статданных факторов Yi
''' Dim col As Long ' ТЕСТ
''' MassYi = CreateMatrix(vecX.MatrixRow, 1)
''' For col = 1 To GeneratorRND_MassYi.MatrixCol
''' MassYi = CopyMatrixToVector(GeneratorRND_MassYi, col) ' Выделить Вектор из Матрицы
''' Call PrintLineExcel(MassYi.MatrixArray, 3, col + 12) ' Напечатать Вектор в таблицу
''' Next col
' !!!!!!!!! ТЕСТ Модуля - закомментировать после проверки
'
End Function

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

Рассмотрим пример, допустим, есть нормальная функция плотности распределения или любая другая нестандартная функция плотности распределения.

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

Рассмотрим практический пример, когда необходимо исследовать цены на конкретный товар, продукцию, услугу на некотором региональном, отраслевом рынке.

Пусть некоторому экономисту необходимо исследовать цены на конкретный товар, продукцию, услугу на некотором региональном, отраслевом рынке:

  1. Для этого он с помощью сбора статистики в состоянии собрать эти ценовые совокупности.
  2. Далее с помощью статистической программы или вручную с помощью табличного процессора он формирует, группирует весь диапазон цен в коридоры цен от минимальной цены до максимальной цены.
  3. Определяет количество продавцов по каждому коридору цен.
  4. После этого опять же с помощью статистической программы или вручную с помощью табличного процессора экономист вычисляет долю продавцов на рынке или точнее вероятность ценового предложения или вероятность покупки по каждому из диапазона цен.
  5. Суммируя последний показатель, и строится функция интегральной вероятности распределения цен, продавцов на исследуемом рынке.

Эти расчеты и результирующий график показаны в табл. 1.2.

Таблица 1.2.

Посмотреть видео ролики "Анализ и оценка отраслевых, рыночных рисков, эффективности".

Аналогично можно исследовать этот рынок через месяц, квартал, полугодие, год необходимо оценить, проанализировать его вероятностную динамику по ценам и продавцам.
Несложно определить, что по сравнению с предыдущей таблицей, цены на исследуемом рынке, количество продавцов изменились. Так, в частности, средние цены не изменились, как были условно ранее равны - 14 руб., так и остались в следующем периоде в среднем 14 руб.
В тоже время средневзвешенные цены изменились с 14,9 руб. до 16,2 руб., мало того изменилось и количество продавцов с 99 до 156. (см. табл.1.3.)

Таблица 1.3.

Посмотреть видео ролики "Анализ и оценка отраслевых, рыночных рисков, эффективности".

Естественно, на следующем этапе возникают очень простые вопросы:

На эти простые вопросы и необходимо дать очень конкретные ответы.

Начнем рассматривать предлагаемую методику с ответа на первый вопрос.

Это нестандартные функции распределения, стандартные функции в методике авторов полностью исключаются из рассмотрения раз и навсегда. Методика не предлагает, а требует никогда не использовать классические стандартные функции распределения и их интегралы вероятности.

Рассмотрим ответы на последние два вопроса.

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

Преимущество сплайн функций по сравнению с полиномом только в одном: с ростом экспериментальных данных получаемый интеграл вероятностей по гистограмме плотности распределения может оказаться больше чем 70-80 точек по количеству отсчетов. При этом и большем объеме точек полином переходит в состояние возбуждения, т.е. генерирует повышенные ошибки. Сплайн функции, несмотря на меньшую точность, лишены этих недостатков – они устойчиво работают с большим количеством точек. Кроме этого, учитывая, что функция плотности вероятности это монотонно растущая функция (без выбросов см. рисунок), как следствие сплайн функции неплохо аппроксимирует любую выборку, кроме одного ограничения.

Разница значений аргументов соседних точек Xi+1 & Xi должны быть не равны 0, т.е.

D=X(i+1) - X(i)<>0.

В противном случае происходит сбой в расчете коэффициентов сплайна:

E=Y/X=(Y(i+1)-Y(i))/D,

т.к. величина первых разностей или дифференциал функции:

X=D=X(i+1)-X(i)<>0

находится в знаменателе, а деление на 0 вызовет очевидный сбой.

Тем не менее, данный момент программа сплайн функций отрабатывает, так как сознательно вводится погрешность в разницу значений аргументов соседних точек:

D=X(i+1)-X(i)=0.0000001,

хотя точность коэффициентов сплайна снижается. В программе это решено следующим образом:

D = X(i+1) — X(i) ' Вычитание или Приращение, т.е. дифференциал

If D = 0 Then D = 0.0000001 ' Если знаменатель = 0, то назначить Малую Величину

.

E = (Y(i+1) - Y(i)) / D ' Вычитание или Приращение, т.е. дифференциал

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

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

Генератор функции равномерного распределения Rnd(), как известно, генерирует псевдослучайные числа в диапазоне (0-1). Для нас это значения интегральной функции, изменяемой от 0% до 100%, т.е. В диапазоне (0-1).

Например, как показано на рис. 1.18. это Y1 & Y2, и далее необходимо определить соответствующие значения Х1 & Х2, т.е. осуществить обратное преобразование – по известным значениям функции интеграла вероятности Y1Yn искать неизвестные значения аргументов распределения Х1Хn. Когда аргументы распределения Х1Хn получены – это и есть функция распределения, вид и значения которой не были известны.

Рис. 1.18. Моделирование функции распределения с помощью метода Монте-Карло

В нашем случае на рис. 1.18. это нормальное распределение (колокольчик) – весьма редкое явление экономике, но и оно легко моделируется. При этом экономисту нет необходимости утруждать себя запоминанием сложных зависимостей типа:

В экономике видов распределений практически бесконечно, а с помощью метода Монте-Карло можно это бесконечное множество функций распределений и построить.

Перед процессом генерации все сплайн коэффициенты были вычислены с помощью функции:

SplineC(X, F, C)

где F – массив значений функции Y от Х, т.е. Y=F(X)

Х - массив значений Х,

С - массив значений сплайн коэффициентов.

В результате, используя обратное преобразование – вместо Х ставим значение Y, а вместо Y ставим значение Х, на место аргумента Xi ставим генератор Rnd(), то на выходе сплайн функции мы получим очередное случайное значения Хi:

Х(i) = SplineP(F, X, C, Rnd()), обратное преобразование.

Сравните с прямым преобразованием, когда по Х формируются значения функции F=Y(i), а на место значения Rnd() ставим значение Xi.

Y(i) = SplineP(X, F, C, Х(i)), прямое преобразование

где F – массив значений функции Y от Х,

Х - массив значений Х,

С - массив значений сплайн коэффициентов,

Rnd() – генератор случайных значений Yi.

i – текущий индекс значения генерируемого массива i=1...N, где N размер генерируемой выборки.

В результате по данным Y1,Y2,…,Yi, как показано на рисунке ранее, будут получены соответствующие значения Х12,…,Xi. Генерация случайных значений Х12,…,Xi заканчивается, когда полностью сформирована выборка, т.е. i=N.

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

Например, при исследовании эконометрической модели продолжительности жизни для актуарных расчетов по страхованию жизни исследователь непременно сталкивается с проблемой повышенной смертности в момент рождения, т.е. в "0" год жизни, как это наглядно показано на рис. 1.19. - мы видим достаточно сильный выброс (т.н. тяжелый хвост) смертности в грудном “0” возрасте и в «100» летнем возрасте.

Статистика дожития за период 1986-2000 гг. наглядно демонстрирует цели, задачи и результаты "либеральных" реформ, направленные на геноцид русского многонационального народа. За двадцать лет "реформ" в РФ и бывших республиках СССР прямо и косвенно уничтожено более 20 млн.чел.

Рис. 1.19. Тяжелые хвосты или выбросы в плотности распределения, и естественные смещения в интеграле вероятности — в «0» возрасте интеграл вероятностей больше 0%, а должно быть равно 0%, при «100» летнем возрасте интеграл вероятностей меньше 100%, а должно быть равно 100%. Статистика по дожитию.

В результате интегральная вероятностная модель при Х1=0 будет принимать не нулевые значения, т.е. F(Х1)<>0%. В этом случае образуется так называемый тяжелый хвоствыброс, а интегральная функция вероятности в различные временные периоды будет принимать значения в диапазоне F(Х1)=1,7-2,4%, что также наглядно видно на графике. Т.е. интегральная функция вероятности при Х1=0 не будет равна нулю F(Х1)>0. В рассматриваемом примере F(Х1)=1,7-2,4%.

Как следствие при аппроксимации данной функции с помощью сплайн функций Х(i)=SplineP(F, X, C, Rnd()) в связи с тем, что сплайн вытягивает F(Х1) в отрицательную зону Х1, при генерации будет образовываться хвост с отрицательным возрастом Х(i)<Min(Xi)<0 лет. Понятно, что человек в реальной жизни не может иметь возраст равный минус десять или минус пять лет. Это искажение реальной картины формируется исключительно сплайн функцией. Такая же ситуация может возникать, когда в статистическом учете фиксируется условная максимальная продолжительность жизни человека не более 100 лет, т.е. Х(i)<Max(Xi)<100 лет. Это также наглядно показано на графике - мы видим не очень сильный всплеск в "100" лет, в сравнении с "0" годом, но и это тоже выброс или тяжелый хвост.

Данный момент логично вытекает из того, что вероятность случайной величины ξ окажется в интервале a'=Min(ξ), b'=Max(ξ), равна интегралу

Или с учетом минимаксных ограничений данный интеграл можно записать в виде:

И далее чтобы разыгрывать случайные значения ξ необходимо составить уравнение:

Заметим, что функция плотности вероятности р(х) описывается в виде аппроксимирующей сплайн функции, генерируемой программой. Т.е. мы практически не нуждаемся в знании, каким образом ее можно представить математически, или какую выбрать стандартную функцию распределения. Нас больше интересует экономический смысл, а не собственно функция и ее математическая форма и выражение. Нас интересует конкретные значения функции вероятностей F(Xi) и значений аргумента Xi и/или наоборот.

Таким образом, для исключения невозможных ситуаций, характерных для физических, социальных, экономических свойств исследуемых объектов, нам в программный код модели генератора необходимо ввести эти минимаксные ограничения, как слева, так и справа по генерируемой выборке по критерию Min(Xi) & Max(Xi). В результате программная итерационная модель генератора должна быть расширена следующим кодом ограничений:

'

Arg(i)=SplineP(F, X, C, Rnd()) 'Обратное преобразование.

If Arg(i) < MinXi Then Arg(i)=MinXi 'Ограничение по MinXi

If Arg(i) > MaxXi Then Arg(i)=MaxXi 'Ограничение по MaxXi

'

В целом весь процесс генерации модели можно легко представить в виде более чем простого программного модуля:

ReDim X(1 To N) As Double 'Массив => Xi

ReDim F(1 To N) As Double 'Массив => Y=F(Xi)

ReDim C(1 To N) As Double 'Массив => C => К-тов сплайнов

ReDim Arg(1 To N) As Double 'Массив => Arg => массив случайных чисел Х(i), по данным функции Y=F(X)

'

On Error Resume Next ' Отключает обработчик ошибки

'

'Ввод ограничений для генератора случайных чисел по критерию Min(Xi) & Max(Xi).

'

MinXi= минимальное возможное значение Xi

MaxXi= максимальное возможное значение Xi

'

'Ввод массива данных Х & Y=F(X)

Call InArr(X, F)

'Вычисление к-тов сплайна C для массива данных Х & Y=F(X)

Call SplineC(X, F, C)

'Генерация массива случайных чисел Х(i), по данным функции Y=F(X)

For i=1 to N

Arg(i)=SplineP(F, X, C, Rnd()) ' Генерация массива аргументов Arg(i)

' ОБРАТНОЕ преобразование. По значению Yi (в формуле Arg) вычисляем Xi

' Сравните с прямым преобразованием, когда по Х формируются значения функции F=Y(i), а на место значения Rnd() ставим значение Xi.

' Y(i) => SplineP(X, F, C, Х(i)), прямое преобразование

' Следующий оператор формирует ОГРАНИЧЕНИЯ по Min&Max

'

If Arg(i) < MinXi Then Arg(i)=MinXi 'Ограничение по MinXi

If Arg(i) > MaxXi Then Arg(i)=MaxXi 'Ограничение по MaxXi

'

Next i

'

Как видно из приведенного модуля, метод Монте-Карло очень легко реализуется практически тремя строками программы.

'Генерация массива случайных чисел Х(i), по данным функции интеграла вероятностей Y=F(X)

For i=1 to N

'

Arg(i)=SplineP(F, X, C, Rnd()) ' Генерация по Yi статмассива Хi

If Arg(i) < MinXi Then Arg(i)=MinXi 'Ограничение по MinXi

If Arg(i) > MaxXi Then Arg(i)=MaxXi 'Ограничение по MaxXi

'

Next i

Конечно, при условии, что С - массив значений сплайн коэффициентов предварительно рассчитан.

Рассмотренный алгоритм метода Монте-Карло позволяет генерировать выборочную последовательность для любой экспериментальной функции распределения плотности вероятности. Это особенно важно для экономических исследований. К сожалению, или радости, экономику на 90-95% невозможно описать классическим набором стандартных вероятностных функций распределений. Хотя в среде экономистов все еще преобладают традиции прошлого века, а ведь на дворе наступила эпоха всеобщей компьютеризации.

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

Перед тем как построить генератор необходимо:

'++++ РАСЧЕТ КОЭФФИЦИЕНТОВ СПЛАЙНОВ => M +++++++
' X() = Ввод табличных значений =>Х(n)
' Y() = Ввод табличных значений функции =>Y(n)
' M() = Рассчитанные коэффициенты сплайнов =>M(n)
'
Sub SplineC(X() As Double, Y() As Double, M() As Double)
'
Dim n As Integer, i As Integer
Dim L() As Double, R() As Double, S() As Double
Dim D As Double, E As Double, F As Double, H As Double, P As Double
'
On Error Resume Next ' Отключает обработчик ошибки
'
n = UBound(Y)
' ЕСЛИ ЗАДАНА ТОЛЬКО 1 ТОЧКА ВЫХОД
If n < 2 Then Exit Sub
' СФОРМИРОВАТЬ МАССИВЫ
ReDim L(1 To n), R(1 To n), S(1 To n)
'
D = X(2) - X(1)
If D = 0 Then D = 0.0000001 ' Аргументы соседних точек знаменателя должны быть всегда больше "0" X(i+1)-X(i)>0
E = (Y(2) - Y(1)) / D ' В результате деления числителя (Y(2) - Y(1)) на знаменатель "0" получим проблему!!!
For i = 2 To n - 1
H = D
D = X(i + 1) - X(i)
If D = 0 Then D = 0.0000001 ' Аргументы соседних точек знаменателя должны быть всегда больше "0" X(i+1)-X(i)>0
F = E: E = (Y(i + 1) - Y(i)) / D ' В результате деления числителя (Y(2) - Y(1)) на знаменатель "0" получим проблему!!!
L(i) = D / (D + H)
R(i) = 1 - L(i)
S(i) = 6 * (E - F) / (D + H)
Next i
For i = 2 To n - 1
P = 1 / (R(i) * L(i - 1) + 2)
L(i) = -L(i) * P
S(i) = (S(i) - R(i) * S(i - 1)) * P
Next i
M(n) = 0: L(n - 1) = S(n - 1): M(n - 1) = L(n - 1)
For i = n - 2 To 1 Step -1
L(i) = L(i) * L(i + 1) + S(i)
M(i) = L(i)
Next i
ReDim L(1), R(1), S(1)
'
End Sub
'
'+++++++++ ВЫЧИСЛЕНИЕ СПЛАЙН функции Y В ТОЧКЕ Х ++++++++++++++
'X(i) = Ввод табличных значений Х-в
'Y(i) = Ввод табличных значений функции Y(Xi)
'M() - Коэффициенты сплайнов
'Arg - Значение Х для которого необходимо вычислить Y
'!!!!!!!!!!!!!!!!! ВОЗМОЖЕН ПРЯМОЙ И ОБРАТНЫЙ РАСЧЕТ !!!!!!!!!!!!!!!!!!!! _
Для этого необходимо Поменять местами Х & Y,вместо знач.Х поставить Y
'Spline(X, Y, M, Arg) ПРЯМОЙ spline расчет значения Y в точке Х
'Spline(Y, X, M, Arg) ОБРАТНЫЙ spline расчет значения Х в точке Y (Y это Х)
'
Function SplineP(X() As Double, Y() As Double, M() As Double, Arg As Double) As Double
'
Dim ret As Double, i As Integer, n As Integer
Dim D As Double, H As Double, P As Double, R As Double
'
n = UBound(Y)
For i = 1 To n
If Arg < X(i) Then Exit For
Next i
'
Select Case i
Case 1 'If arg Меньше then x(1) => Extrapolation, расчет назад
D = X(2) - X(1)
If D = 0 Then D = 0.0000001 'Аргументы соседних точек не должны быть равны X(i+1)-X(i)>0
ret = -D * M(2) / 6 + (Y(2) - Y(1)) / D
ret = ret * (Arg - X(1)) + Y(1)
Case n + 1 'If arg Больше then x(n) =>Extrapolation, расчет вперед
D = X(n) - X(n - 1)
If D = 0 Then D = 0.0000001 'Аргументы соседних точек не должны быть равны X(i+1)-X(i)>0
ret = D * M(n - 1) / 6 + (Y(n) - Y(n - 1)) / D
ret = ret * (Arg - X(n)) + Y(n)
Case Else 'If x(1) <> x(i) <> x(n) interpolation, т.е. между внешними ограничениями
D = X(i) - X(i - 1): H = Arg - X(i - 1)
R = X(i) - Arg: P = D * D / 6
'''''''''''ret = (M(i - 1) * R ^ 3 + M(i) * H ^ 3) / (6 * D)
ret = (M(i - 1) * R * R * R + M(i) * H * H * H) / (6 * D) ' Так счет быстрее в сравнении с R^3
ret = ret + ((Y(i - 1) - M(i - 1) * P) * R + (Y(i) - M(i) * P) * H) / D
End Select
'
SplineP = ret
'
End Function

Построение регрессионных уравнений, в том числе многофакторных в экономике. Модели и алгоритмы

Одна из традиционных задач, стоящая перед любым экономистом, это найти закономерности в полученных статистических данных по тем или иным экономическим процессам. Практически необходимо построить зависимость Y=f(X), как это показано на рис. 1.20.

Рис. 1.20. Простое линейное регрессионное уравнение вида y=kx

Посмотреть видео ролики "Анализ и оценка отраслевых, рыночных рисков, эффективности".

И правда, что может быть проще. Допустим, нам необходимо описать линейное уравнение Y=k*X, где k — это угол наклона. При этом необходимо так провести эту линию (регрессионное уравнение), чтобы расстояние от линии до любых точек (статистических данных) было бы минимально. Этого можно добиться, если правильно подобрать угол наклона k, что подтверждается коэффициентом точности, детерминации или корреляции R2 – он близок к "1", когда точки все ближе к построенной линии, как это показано на рисунке. Соответственно, равен "1", когда все статистические данные лежат прямо на линии. Равен "0", когда все статистические данные разбросаны на всей поверхности, и поэтому провести только одну линию невозможно – можно провести лишь их бесконечное множество.

Итак, нам известен вектор Y, состоящий из множества значений yi, допустим этих статистических данных 30, т.е. их количество лежит в диапазоне i=1-30. Также известны все значения вектора X. Практически каждому известному значению хi соответствует его также известное значение yi и так 30 раз, т.е. yi=ki*xi. В этой задачке осталось вычислить неизвестную величину угла наклона – k. Для этого необходимо, как всех учили еще в начальных классах школы, проделать ну очень "сложные" преобразования k=1/x*y=y/x, или в векторной форме - k=1/Х*Y,

Одна сложность вектора Y & X – это массив значений, точек, а угол наклона – k должно быть получено как одно число, а не как массив чисел.

Для того, чтобы решить эту задачу вспомним матричные преобразования. Из матричных вычислений известно, что если преобразовать (транспонировать, повернуть на 90o, или на 1/2) матрицу-колонку вектора X в матрицу-строку – X', и далее перемножить строку X' на колонку X получим X'X, то получим уже не матрицу, вектор множества чисел, а только одно число x. Аналогичные преобразования необходимо сделать и с массивом точек вектора Y, т.е. умножить строку X' на колонку вектора Y, в результате также получим уже не матрицу, вектор множества чисел, а только одно число y.

Запишем эти матричные преобразования.

k = 1/X'Х * X'Y

или можно представить как

k = (X'Х)-1 * X'Y

Практически если сократить числитель и знаменатель на строку X', то будет получено исходное матричное представление k=1/Х*Y=(Х)-1*Y. Так, что нами математически ничего не было нарушено. Зато в результате найден угол наклона – k как одно число, а не массив чисел .

Расширим данную задачу.

Допустим, нам необходимо получить уравнение y=k0+k1*x, как представлено на втором рис. 1.21., т.е. необходимо найти еще свободный коэффициент k0, кроме угла наклона k1.

Рис. 1.21. Простое линейное регрессионное уравнение вида y=k0+k1*x

Удивительно, но и для этой задачи используются те же матричные преобразования вида:

k = (X'Х)-1 * X'Y

Тем не менее, необходимо разобрать один момент. Коэффициент угла наклона k1 привязан к вектору Х (переменным числам). В тоже время свободный коэффициент k0, не привязан ни к какому вектору, а это нарушает условия матричных вычислений. Для устранения этого нарушения - умножим свободный коэффициент k0 на вектор столбец, состоящий из одних единиц, обозначим его как "I". Ничего не изменится от умножения "1" на свободный коэффициент k0, но матричные требования соблюдены .

Для того, чтобы решить и эту вторую задачу опять обратимся к матричным преобразованиям. Преобразуем (транспонируем, повернем на 90о) матрицу-колонку, состоящую из двух векторов I & X в матрицу-строку. Для простоты обозначим эту матрицу, состоящую из двух строк, как – X'. Далее перемножим эту матрицу-строку, состоящую из двух векторов I & X, на матрицу-колонку, состоящую из этих же двух векторов I & X. В результате получим X'X, но уже не матрицу или вектор множества чисел, а квадратную матрицу размером 2х2 (две строки на две колонки) - x'x. Аналогичные преобразования необходимо сделать и с массивом точек вектора Y, т.е. умножить матрицу-строку, состоящую из двух векторов I & X на колонку вектора Y, в результате получим матрицу размером 2х1 - x'y.

Уточним только, что при одном коэффициенте угле наклона - k1 обозначение принималось как число – k. При расчете двух коэффициентов получим уже не число k, а вектор столбец из двух элементов: в первой строке - свободный коэффициент k0, во второй строке - угол наклона k1. Поэтому этот вектор-столбец регрессионных коэффициентов обозначим большой жирной буквой K. Запишем эти матричные преобразования.

K = 1/X'Х * X'Y

или можно представить как

K = (X'Х)-1 * X'Y

Практически если сократить числитель и знаменатель на строку X', то будет получено исходное матричное представление K=1/Х*Y=(Х)-1*Y. Так, что нами ничего не было нарушено. Зато в результате найден вектор-столбец, состоящий из двух элементов:

В первой строке - свободный коэффициент k0.

Во второй строке - угол наклона – k1.

Как видно из приведенных примеров, расчет любого количества регрессионных коэффициентов, многофакторных регрессионных уравнений легко представить в матричном виде:

K = (X'Х)-1 * X'Y

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

Для начала опишем алгоритм расчета регрессионного уравнения в векторной форме

  1. Транспонируем матрицу X в матрицу X'. В Excel функция транспонирования - ТРАНСП(F10:F44). В OpenOffice.org Calc функция транспонирования - TRANSPOSE(F10:F44)
  2. Умножим матрицы X'X. В Excel функция умножения, объединенная с транспонированием - F46=МУМНОЖ(ТРАНСП(F10:F44);F10:F44). В OpenOffice.org Calc функция транспонирования - F46=MMULT(TRANSPOSE(F10:F44);F10:F44).
  3. Преобразуем X'X в обратную матрицу (X'Х)-1. В Excel функция получения обратной матрицы - G46=МОБР(F46). В OpenOffice.org Calc функция транспонирования - G46= MINVERSE(F46).
  4. Умножим матрицы X'Y. В Excel функция умножения, объединенная с транспонированием - F47=МУМНОЖ(ТРАНСП($F10:$F44);G10:G44). В OpenOffice.org Calc функция транспонирования - F47=MMULT(TRANSPOSE($F10:$F44);G10:G44).
  5. Вычислим вектор регрессионных коэффициентов K=(X'Х)-1*X'Y. В Excel функция умножения - G47=МУМНОЖ(G46;$F47). В OpenOffice.org Calc функция транспонирования - G47=MMULT(G46;$F47).

Этот алгоритм можно представить в виде табл. 1.4., где X & Y были представлены как одномерный вектор:

Посмотреть видео ролики "Анализ и оценка отраслевых, рыночных рисков, эффективности"

' П/с вычисления регрессионного к-та по одному Yi фактору, по факторное вычисление
' На вход:
' вектор Х => vecX и массив всех факторов Yi => massYi
' На выходе:
' Вектор K — регрессионных коэффициентов по каждому Yi фактору
'
Function RegressFactoring(vecX As MatrixRec, massYi As MatrixRec) As MatrixRec
'
Dim vecXtr As MatrixRec ' Транспонируем Вектор Х
Dim vecYi As MatrixRec ' Вектор по каждому Yi фактору
Dim ХtrX As MatrixRec ' Результат <2> Шага Алгоритма => ХtrX
Dim ХtrYi As MatrixRec ' Результат <3> Шага Алгоритма => ХtrY
Dim vecK As MatrixRec ' Вектор K — регрессионных коэффициентов
Dim i As Long
'
vecK = CreateMatrix(massYi.MatrixCol, 1)
'======= <1> Шаг Алгоритма => Х'
vecXtr = TransponeMatrix(vecX)
'======= <2> Шаг Алгоритма => Х'X
ХtrX = MultipleMatrixOnMatrix(vecXtr, vecX)
' НАЧАЛО ЦИКЛА вычисления регрессионного к-та по каждому Yi фактору
For i = 1 To massYi.MatrixCol
' (* Функция Извлекает Вектор из Матрицы из Позиции Столбца *)
vecYi = CopyMatrixToVector(massYi, i)
'======= <3> Шаг Алгоритма => Х'Y
ХtrYi = MultipleMatrixOnMatrix(vecXtr, vecYi)
'======= <5> Шаг Алгоритма => b=Y/X=X'Y/X'X. Простое деление
vecK.MatrixArray(i, 1) = ХtrYi.MatrixArray(1, 1) / ХtrX.MatrixArray(1, 1) ' Вектор Ki
Next i
' ОКОНЧАНИЕ ЦИКЛА Вектора K — регрессионного к-та по каждому Yi фактору
RegressFactoring = vecK
' !!!!!!!!! ТЕСТ Модуля - закомментировать после проверки
''' vecK = TransponeMatrix(vecK)
''' For i = 1 To vecK.MatrixCol
''' Cells(36, 12 + i) = vecK.MatrixArray(1, i)
''' Next i
' !!!!!!!!! ТЕСТ Модуля - закомментировать после проверки
'
End Function
'

Раскроем укрупненный вариант алгоритма расчета регрессионных коэффициентов для построения многофакторных функциональных уравнений любой сложности

Т.е. не будет учтен цикл вычисления регрессионных уравнений индивидуально по каждому фактору.

Уточним - каждый из пунктов алгоритма, в свою очередь, должен рассматриваться и описываться своей подсистемой и как следствие - своим индивидуальным алгоритмом.

  1. Установим количество исследуемых факторов, входящих в регрессионное уравнение – X, т.е. i=1…n.
  2. Определим, будет ли присутствовать в многофакторном уравнении свободный коэффициент – k0. Признак присутствия k0 флаг устанавливается в 1, отсутствие в 0.
  3. Если введен свободный коэффициент – k0, то генерируем вектор, состоящий только из "1" – обозначим его как – I, i=1…n. Если нет, то данный пункт опускаем.
  4. Формируем матрицу X, в которую включены все вектора (i=1…n) исследуемых факторов, входящих в регрессионное уравнение. Если введен свободный коэффициент – k0, то в матрицу X, включаем и вектор – I, i=1…n.
  5. Транспонируем матрицу X, обозначим ее как X'.
  6. Умножим матрицы X' на X, обозначим ее как X'X.
  7. Рассчитаем обратную матрицу, т.е. преобразуем X'X в (X'Х)-1.
  8. Формируем матрицу Y.
  9. Умножим матрицы X' на Y, обозначим ее как X'Y.
  10. Вычислим вектор регрессионных коэффициентов K. Для этого умножим обратную матрицу (X'Х)-1 на матрицу X'Y. Т.е. вычислим вектор регрессионных коэффициентов K = (X'Х)-1 * X'Y.
  11. Сформируем итоговое регрессионное многофакторное уравнение, которое можно представить в векторной форме: Y=KX
' П/с вычисления к-тов многофакторного уравнения Y=F(X0,X1,...,Xn)
' На вход:
' Вектор Y и массив всех факторов Xi.
' При наличии b0 — первая колонка X0 состоит из "1". Остальные колонки значения факторов X1,...,Xn
' На выходе:
' Вектор K — к-тов многофакторного уравнения Y=F(X0,X1,...,Xn)
'
Function RegressManyFactor(vecY As MatrixRec, massXi As MatrixRec) As MatrixRec
'
Dim Xtr As MatrixRec ' Транспонируем массив факторов Х
Dim ХtrX As MatrixRec ' Результат <2> Шага Алгоритма => ХtrX
Dim ХtrY As MatrixRec ' Результат <3> Шага Алгоритма => ХtrY
Dim ХtrX_1 As MatrixRec ' Результат <4> Шаг Алгоритма => (Х'X)-1
Dim vecK As MatrixRec ' Вектор K <5> Шаг Алгоритма => b=(X'Y)^-1*X'X
'
'======= <1> Шаг Алгоритма => Х'
Xtr = TransponeMatrix(massXi)
'======= <2> Шаг Алгоритма => Х'X
ХtrX = MultipleMatrixOnMatrix(Xtr, massXi)
'======= <3> Шаг Алгоритма => Х'Y
ХtrY = MultipleMatrixOnMatrix(Xtr, vecY)
'======= <4> Шаг Алгоритма => (Х'X)-1
'<====== Обращение матрицы по методу Sweeping - (X'X)-1
If MatrixInverse(ХtrX_1) Then
'======= <5> Шаг Алгоритма => b=(X'Y)^-1*X'X
RegressManyFactor = MultipleMatrixOnMatrix(ХtrX_1, ХtrY) ' Вектор K
End If
'
End Function
'

Этап анализа и моделирования оценки рисков банка и определения денежного потенциала депозитного и кредитного портфелей банка

Итак, эталонная модель нами получена. Как видно из рисунка, она как бы делит плоскость статистических данных по i-фактору на две части. Практически осуществлен классический дискриминантный (классификационный, кластерный) анализ. Логика анализа проста. Рассмотрим его на примере фактора себестоимость рис. 1.22.

Рис. 1.22. Анализ фактора себестоимость. Риск объекта минимален.

Посмотреть видео ролики "Анализ и оценка отраслевых, рыночных рисков, эффективности".

Если исследуемое предприятие при реализации некоторого объема продаж имеет себестоимость ниже чем в среднем на рынке, как это показано на графике, то его можно отнести к условно эффективным предприятиям. Подчеркнем только по данному i-му фактору. Это наглядно видно на рис. 1.22.- предприятие (его жирная точка) находится в нижней части плоскости.

Если исследуемое предприятие при реализации некоторого объема продаж имеет себестоимость выше чем в среднем на рынке, как это показано на графике, то его можно отнести к условно неэффективным предприятиям. Подчеркнем только по данному i-му фактору. Это наглядно видно на рис. 1.23. - предприятие (его жирная точка) находится в верхней части плоскости.

Рис. 1.23. Анализ фактора себестоимость. Риск объекта максимален.

Благодаря такой достаточно простой классификации достигается разделение всех предприятий по каждому i-му фактору на две плоскости, области – средне эффективных (часть плоскости ниже линии регрессионного уравнения, включая ее саму) и средне неэффективных предприятий (часть плоскости выше линии). После чего нетрудно перейти от категории эффективности к категории рисков. Понятно, что эффективные предприятия обладают низкими рисками для банка по сравнению с предприятиями, у которых эффективность ниже, в нашем примере предприятия, имеющие более высокую себестоимость.

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

Таким образом, построив регрессионное уравнение эталонной модели, практически решается задача качественной оценки эффективности, рисков для каждого предприятия по каждому i-му фактору. Кроме этого тут же можно дать не только качественный, но количественный анализ и оценку любого исследуемого предприятия по любому i-му фактору. Практически, подставив данные любого предприятия в регрессионное уравнение эталонной модели, можно определить насколько он эффективен/неэффективен в денежном выражении по отношению к средним показателям по исследуемому i-му фактору, который сложился на данном рынке.

Вычисления для проведения кластерного, дискриминантного анализа рисков более чем элементарны:

Yэф=k*Xi - Yi ,

Где
k – коэффициент наклона регрессионного уравнения эталонной модели.
Xi – объем продаж исследуемого предприятия в денежном выражении.
Yi – величина затрат (например, себестоимость) исследуемого предприятия в денежном выражении.
Yэф – эффективность работы. Насколько эффективней работает исследуемое предприятие по отношению к его средним конкурентам на рынке в денежном выражении.

Если полученный результат больше равно "0", то предприятие эффективно работает в денежном выражении на полученный результат, чем среднее предприятие на данном конкурентном рынке.

Если полученный результат меньше "0", то предприятие неэффективно работает в денежном выражении на полученный результат, чем среднее предприятие на данном конкурентном рынке.

Приведенная количественная оценка эффективности может быть дана не только по отношению средне эффективному, средне рискованному предприятию, но и по отношению к средне самому эффективному и мало рискованному. Или, наоборот, по отношению к самому неэффективному предприятию на данном рынке. Для этого необходимо дополнительно вычислить минимальный (kmin) и максимальный (kmax) коэффициент наклона регрессионного уравнения эталонной модели, тем самым, расширяя дискриминантный, кластерный анализ.

В алгоритме будем применять упрощенный, но достаточно точный расчет:

  1. Для этого необходимо разделить каждый i-тый элемент вектора Y на i-тый элемент вектора X, т.е. ki=yi/xi.

' Расчет Массива доли факторов Yi в объеме продаж Х. Деление Yi/X
Function Div_YiOnX(massYi As MatrixRec, vecX As MatrixRec) As MatrixRec
Dim vecYi As MatrixRec 'Вектор исходных статданных одного фактора Yi
Dim massYi_X As MatrixRec 'Вектор исходных статданных одного фактора Yi
Dim col As Long
'
massYi_X = CreateMatrix(massYi.MatrixRow, massYi.MatrixCol) 'Создать массив доли факторов Yi в объеме продаж Х => Yi/X
vecYi = CreateMatrix(vecX.MatrixRow, 1) 'Создать Вектор исходных статданных одного фактора Yi
For col = 1 To massYi.MatrixCol
vecYi = CopyMatrixToVector(massYi, col) ' Выделить Вектор одного фактора Yi из Матрицы
'<====== (* Функция делит первую матрицу на вторую *)
vecYi = DivMatrixOnMatrix(vecYi, vecX)
'<====== (* Функция Вставляет Вектор в Матрицу в Позицию Столбца *)
'Function SetVectorIntoMatrix(MPtr As MatrixRec, VPtr As MatrixRec, Pos As Long) As MatrixRec
massYi_X = SetVectorIntoMatrix(massYi_X, vecYi, col)
Next col
'
Div_YiOnX = massYi_X
'
' !!!!!!!!! ТЕСТ Модуля - закомментировать после проверки
' Вывод, печать массива факторов Yi/X
''' For col = 1 To MassYi_X.MatrixCol
''' vecYi = CopyMatrixToVector(MassYi_X, col) ' Выделить Вектор одного фактора Yi из Матрицы
''' Call PrintLineExcel(vecYi.MatrixArray, 48, col + 12) ' Напечатать Вектор в таблицу
''' Next col
' !!!!!!!!! ТЕСТ Модуля - закомментировать после проверки
'
End Function
'
  1. В полученном векторе Y/Х найти минимальное значение kmin=Min(Y/Х).

  2. В полученном векторе Y/Х найти максимальное значение kmax=Max(Y/Х).

'=============== ОПИСАТЕЛЬНАЯ СТАТИСТИКА МОДЕЛЕЙ по Yi факторам
' Расчет Векторов Min, Max, MХ
vecMin = statVecMin(Mass_YiOnX)
vecMax = statVecMax(Mass_YiOnX)
vecMX = statVecMX(Mass_YiOnX)
'
'=== ОПИСАТЕЛЬНАЯ СТАТИСТИКА
'
'=== Вычисление вектора средних MX
Function statVecMX(X As MatrixRec) As MatrixRec
Dim i As Long, j As Long
Dim Sum As Double
Dim Temp As MatrixRec
Temp = CreateMatrix(X.MatrixCol, 1)
For i = 1 To X.MatrixCol
Sum = 0
For j = 1 To X.MatrixRow
Sum = Sum + X.MatrixArray(j, i)
Next j
Temp.MatrixArray(i, 1) = Sum / X.MatrixRow
Next i
statVecMX = Temp
'
End Function
'
'=== Вычисление вектора Min значений
Function statVecMin(X As MatrixRec) As MatrixRec
Dim i As Long, j As Long
Dim MinI As Double
Dim Temp As MatrixRec
Temp = CreateMatrix(X.MatrixCol, 1)
For i = 1 To X.MatrixCol
MinI = X.MatrixArray(1, i)
For j = 2 To X.MatrixRow
If MinI > X.MatrixArray(j, i) Then
MinI = X.MatrixArray(j, i)
End If
Temp.MatrixArray(i, 1) = MinI
Next j
Next i
statVecMin = Temp
'
End Function
'
'=== Вычисление вектора Mах значений
Function statVecMax(X As MatrixRec) As MatrixRec
Dim i As Long, j As Long
Dim MaxI As Double
Dim Temp As MatrixRec
Temp = CreateMatrix(X.MatrixCol, 1)
For i = 1 To X.MatrixCol
MaxI = X.MatrixArray(1, i)
For j = 2 To X.MatrixRow
If MaxI < X.MatrixArray(j, i) Then
MaxI = X.MatrixArray(j, i)
End If
Temp.MatrixArray(i, 1) = MaxI
Next j
Next i
statVecMax = Temp
'
End Function
'
  1. Определить эффективность по отношению к средне лучшему предприятию на рынке Ymin= kmin*Xi - Yi.

  2. Определить эффективность по отношению к средне худшему предприятию на рынке Ymax= kmax*Xi - Yi.

'<======== Вектор РИСКОВ i-ФИРМЫ, РАСЧЕТ ее ЭФФЕКТИВНОСТИ в Денежном выражении.
'vecK - регрессионные модели по Yi факторам
'massYi_X - массив доли факторов Yi в объеме продаж Х.
'StatMassYi - 4 колонка Правило Оценки рисков по Yi факторам
'Nfirm - номер исследуемой фирмы
'
Function RiskVecFirm(vecK As MatrixRec, massYi_X As MatrixRec, _
StatMassYi As MatrixRec, Nfirm As Long) As MatrixRec
Dim rowI As Long
Dim vecRiskI As MatrixRec
' Создать временный вектор рисков исследуемой фирмы
vecRiskI = CreateMatrix(vecK.MatrixRow, 1)
For rowI = 1 To vecK.MatrixRow
Select Case StatMassYi.MatrixArray(rowI, 4)
Case 0 ' Правило анализа Рисков для факторов Y3,Y4,Y15
If vecK.MatrixArray(rowI, 1) >= massYi_X.MatrixArray(Nfirm, rowI) Then
vecRiskI.MatrixArray(rowI, 1) = 1 ' Есть риск
Else
vecRiskI.MatrixArray(rowI, 1) = 0 ' Нет риска
End If
Case 1 ' Правило анализа Рисков для остальных Yi
If vecK.MatrixArray(rowI, 1) > massYi_X.MatrixArray(Nfirm, rowI) Then
vecRiskI.MatrixArray(rowI, 1) = 0 ' Нет риска
Else
vecRiskI.MatrixArray(rowI, 1) = 1 ' Есть риск
End If
End Select
Next rowI
'
RiskVecFirm = vecRiskI
'
End Function
'
'<======== РАСЧЕТ ЭФФЕКТИВНОСТИ i-ФИРМЫ в Денежном выражении.
'vecX - вектор объема продаж Х в денежном выражении.
'massYi - массив факторов Yi в денежном выражении.
'StatMassYi - 4 колонка Правило Оценки рисков и эффективности по Yi факторам
'vecK - регрессионные модели по Yi факторам Сравнение со Средним конкурентом
'Nfirm - номер исследуемой фирмы
' Эффективность оценивается только по среднему рыночному (конкурентному) уровню
Function EffectVecFirm(vecX As MatrixRec, massYi As MatrixRec, _
StatMassYi As MatrixRec, vecK As MatrixRec, _
Nfirm As Long) As MatrixRec
Dim rowI As Long
Dim vecEffectI As MatrixRec
'
' Создать временный вектор эффективности исследуемой фирмы
' Вектор Сравнение со средним конкурентом
vecEffectI = CreateMatrix(vecK.MatrixRow, 1)
' Сравнение со Средним конкурентом
For rowI = 1 To vecK.MatrixRow
Select Case StatMassYi.MatrixArray(rowI, 4) ' Вектор правил по оценке рисков и эффективности
Case 0 ' Правило анализа Рисков для факторов Y3,Y4,Y15
If (vecX.MatrixArray(Nfirm, 1) * vecK.MatrixArray(rowI, 1) - massYi.MatrixArray(Nfirm, rowI)) >= 0 Then
' Сумма денежных потерь
vecEffectI.MatrixArray(rowI, 1) = (vecX.MatrixArray(Nfirm, 1) * vecK.MatrixArray(rowI, 1) _
- massYi.MatrixArray(Nfirm, rowI))
Else
' Нет денежных потерь
vecEffectI.MatrixArray(rowI, 1) = 0
End If
Case 1 ' Правило анализа Рисков для остальных Yi
If (vecX.MatrixArray(Nfirm, 1) * vecK.MatrixArray(rowI, 1) - massYi.MatrixArray(Nfirm, rowI)) < 0 Then
' Сумма денежных потерь
vecEffectI.MatrixArray(rowI, 1) = -(vecX.MatrixArray(Nfirm, 1) * vecK.MatrixArray(rowI, 1) _
- massYi.MatrixArray(Nfirm, rowI))
Else
' Нет денежных потерь
vecEffectI.MatrixArray(rowI, 1) = 0
End If
End Select
Next rowI
'
EffectVecFirm = vecEffectI
'
End Function
'

Следует отметить, что оценку эффективности по средне худшему предприятию проводить бессмысленно – зачем сравнивать исследуемый объект с заведомым "двоечником". Хотя и такой избыточный анализ, по нашему мнению, не сложен.