Цифрова трансформація процесу прогнозування інтегрального показника фінансової безпеки компанії
Анотація: У роботі розглянуто проблему моделювання фінансової безпеки підприємства, здійснено побудову уніфікованого інформаційного сервісу моделювання та прогнозування інтегрального показника фінансової безпеки.
Бібліографічний опис статті:
Богдан Каркавчук, Валентин Каркавчук та Юлианна Стадник. Цифрова трансформація процесу прогнозування інтегрального показника фінансової безпеки компанії//Наука онлайн: Міжнародний електронний науковий журнал - 2021. - №10. - https://nauka-online.com/publications/information-technology/2021/10/21-4/
Інформаційні технології
Каркавчук Богдан Вікторович
магістр спеціальності інформаційних технологій в бізнесі
кафедри цифрової економіки та бізнесу
Львівського національного університету імені Івана Франка
Каркавчук Валентин Вікторович
кандидат економічних наук
Freelance Software Engineer
Стадник Юліанна Андріївна
кандидат економічних наук,
доцент кафедри цифрової економіки та бізнес-аналітики
Львівський національний університет імені Івана Франка
ЦИФРОВА ТРАНСФОРМАЦІЯ ПРОЦЕСУ ПРОГНОЗУВАННЯ ІНТЕГРАЛЬНОГО ПОКАЗНИКА ФІНАНСОВОЇ БЕЗПЕКИ КОМПАНІЇ
Анотація. У роботі розглянуто проблему моделювання фінансової безпеки підприємства, здійснено побудову уніфікованого інформаційного сервісу моделювання та прогнозування інтегрального показника фінансової безпеки.
Ключові слова: фінансова безпека, моделювання, прогнозування, програмування, цифризація.
Актуальність теми. В умовах галопуючих темпів розвитку цифрових технологій, який спостерігається на всіх рівнях економіки, цифризація має значний вплив на безпеку господарюючого об’єкта: як позитивний, так і негативний. Зважуючи перспективи й недоліки новітніх засобів ведення бізнесу без сумніву можна зробити висновок, що у виграшній конкурентній боротьбі є підприємства, в яких активно впроваджується інформаційні процеси з використанням цифрових технологій.
Під цифризацією або цифровою трансформацією пропонується розуміти процес, за якого об’єкти, їхні зв’язки та взаємодія моделюються й реалізуються за допомогою інформаційних технологій. До того ж цей процес пропонується оптимізовувати задля виключення впливу людини. Саме для таких цілей розроблено спосіб комунікації: API — application programming interface, – що допомагає “спілкуватись” програмам між собою без участі людини. Розглянемо цифризацію прогнозування фінансового стану компанії як процес взаємодії різноманітних інформаційних продуктів.
Безпека суб’єкта господарювання прямо пропорційно впливає на його розвиток і повинна оцінюватись на всіх етапах його діяльності. Оцінювання безпеки діяльності та безпеки підприємства є досить поширеним явищем, проте до сьогодні не було вироблено єдиного уніфікованого підходу його розрахунку.
В [1] наведено підходи до розрахунку та прогнозування показника безпеки. Використовуючи дані одного з підприємств Львівщини пропонується розраховувати значення прогнозу інтегрального показника фінансової безпеки з використанням поліноміальної регресії. Це пояснюється тим, що нормовані значення показників діяльності підприємства не мають усереднених монотонних траєкторій.
У таблиці 1 наведені нормовані значення показників, які характеризують рівень фінансової безпеки підприємства.
Таблиця 1
Нормовані значення показників, які характеризують рівень фінансової безпеки підприємства
Номер часового періоду | ut1 | ut2 | ut3 | ut4 | ut5 | ut6 | ut7 | Інтегральний показник рівня фінансової безпеки, Bt |
1 | 0,8056 | 0,8906 | 0,6232 | 1,0000 | 0,9946 | 0,2816 | 0,3428 | 0,0429 |
2 | 0,6667 | 0,8125 | 0,6708 | 1,0000 | 0,9961 | 0,6303 | 0,5038 | 0,1149 |
3 | 0,8611 | 0,8750 | 0,8521 | 1,0000 | 1,0000 | 0,3860 | 0,4394 | 0,1089 |
4 | 0,6944 | 1,0000 | 0,8170 | 1,0000 | 0,9780 | 0,5545 | 0,4451 | 0,1369 |
5 | 0,8889 | 0,8125 | 0,7043 | 0,9908 | 0,9780 | 0,3496 | 0,6818 | 0,1175 |
6 | 1,0000 | 0,8438 | 0,7477 | 0,9908 | 0,9780 | 0,5842 | 0,7519 | 0,2685 |
7 | 0,8056 | 0,8750 | 0,6057 | 0,9908 | 0,9610 | 0,7945 | 0,9905 | 0,3199 |
8 | 0,7500 | 0,9844 | 0,7878 | 0,9908 | 0,9780 | 1,0000 | 0,8371 | 0,4718 |
9 | 0,8611 | 0,8438 | 0,9236 | 0,9259 | 0,8776 | 0,4396 | 0,7595 | 0,1820 |
10 | 0,8333 | 0,7500 | 0,8246 | 0,9259 | 0,8888 | 0,7041 | 0,8201 | 0,2449 |
11 | 0,7778 | 0,8125 | 0,8739 | 0,9259 | 0,8849 | 0,5964 | 0,9867 | 0,2663 |
12 | 0,7222 | 0,9063 | 0,7962 | 0,9259 | 0,8961 | 0,6320 | 0,9034 | 0,2468 |
13 | 0,8056 | 0,8281 | 0,8037 | 0,8980 | 0,8698 | 0,5019 | 1,0000 | 0,2102 |
14 | 0,7500 | 0,8438 | 0,6583 | 0,8980 | 0,8810 | 0,6597 | 0,7803 | 0,1697 |
15 | 0,8056 | 0,7969 | 0,8647 | 0,8980 | 0,8839 | 0,4825 | 0,8883 | 0,1888 |
16 | 0,8056 | 0,8906 | 0,8956 | 0,8980 | 0,8976 | 0,6588 | 0,6951 | 0,2372 |
17 | 0,8611 | 0,7969 | 0,9683 | 0,8697 | 0,8683 | 0,5614 | 0,5398 | 0,1520 |
18 | 0,7778 | 0,7500 | 0,9474 | 0,8697 | 0,8898 | 0,5670 | 0,5303 | 0,1286 |
19 | 0,7222 | 0,9219 | 1,0000 | 0,8697 | 0,9039 | 0,5617 | 0,5644 | 0,1659 |
Джерело: [1, с. 205]
Кінцева вибрана модель має вигляд:
t = 0,010250 + 0,024921 t + 0,007053 t2 – 0,000969 t3 + 0,000029 t4. (1)
[1, с. 209 ]
Розглянемо використати мови Python для автоматизації процесу вибору найкращої моделі для прогнозування.
Python не існує як окремий продукт, а дедалі більше інтегрує використання різноманітних пакетів програмування. Серед них виділимо skykit-learn [2] — зручний пакет для використання у машинному навчанні, який забезпечує також прості та ефективні інструменти для прогнозного аналізу даних, доступний для всіх і багаторазовий у різних контекстах, побудований на NumPy, SciPy та matplotlib, а також він є відкритим вихідним кодом.
Для статистичного аналізу зручно використовувати класи PolynomialFeatures [3] з preprocessing та LinearRegression [4] з linear_model. Зручним засобом є модуль pandas [5] для перетворення ряду даних у потрібний формат {array-like, sparse matrix} з використанням класу Series:
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures(2)
from sklearn.linear_model import LinearRegression
Наявність Python з необхідними пакетами дає змогу будувати трендові поліноміальні моделі:
y = [0.0429, 0.1149, 0.1089, 0.1369, 0.1175, 0.2685, 0.3199, 0.4718, 0.182, 0.2449, 0.2663, 0.2468, 0.2102, 0.1697, 0.1888, 0.2372, 0.152, 0.1286, 0.1659, 0.2531] # Дані з Тадлиці 1
x = [i+1 for i,_ in enumerate(arr)]
x = pd.Series(x).values.reshape(-1,1)
y = pd.Series(y).values.reshape(-1,1)
poly = PolynomialFeatures(degree=4)(3)
x_poly = poly.fit_transform(x)
polyreg = LinearRegression()
polyreg.fit(x_poly, y)
print(“R2”, polyreg.score(x_poly, y))
print(“a0=”,polyreg.intercept_[0])
for item, value in np.ndenumerate(polyreg.coef_):
print(f”a{item[1]}= {value} “) if item[1] != 0 else _
У результаті виконання наведеного коду отримаємо:
R2 0.5673554296926449
a0= 0.01023611971108579
a1= 0.02490556686026257 (4)
a2= 0.007057685381208343
a3= -0.0009690132581711185
a4= 2.915570430378836e-05
Значення, розраховане з допомогою Python цілком збігається з розрахованим у [1]. Для того, щоб переконатись остаточно у правильності побудови й використання поліноміальної моделі варто перевірити й інші розраховані у [1] коефіцієнти поліноміальних функцій.
У такому вигляді, як подано реалізацію коду на Python, користування програмою є дещо утрудненим. Спрощення можна виконати за допомогою простої служби Flask [7], це дасть можливість запускати її окремо, без виконання налаштування інших компонентів. Зазвичай серверну частину розміщується у файлі з назвою server.py:
from flask import Flask, request, jsonify
from model import polyreg_prediction
server = Flask(__name__)
@server.route(“/polyreg/predict”, methods=[‘POST’]) (5)
def predict():
data = request.json
result = polyreg_prediction(data)
return jsonify(result)
if __name__ == “__main__”:
server.run(host=’0.0.0.0′)
Для того, щоб запустити цю програму, нам потрібно спочатку переконатися, що встановлені всі необхідні залежності. Одним із способів керування залежностями є використання інсталятора пакетів, наприклад pip. Для цього нам потрібно створити файл requirements.txt і записати в нього залежності. Прикладом такого файлу для нашого простого server.py та модельної частини є наступний:
sklearn
numpy
pandas (6)
Flask
Тепер маємо наступну структуру:
app
├─── requirements.txt
└─── src (7)
└─── model.py
└─── server.py
Змодифікуємо у model.py код згідно правил написання “хорошого” коду, а також для збільшення можливостей перевикористання. Частина імпортів матиме вигляд:
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression (8)
from sklearn.pipeline import make_pipeline
from typing import Optional
Створимо клас PolyRegModel, щоб користуватися його екземплярами:
class PolyRegModel: (9)
Конструктор класу має вигляд:
def __init__(self):
self.polyreg = None
self._score = 0(10)
self._coefs = None
self._intercept = None
self._degree = 1
Метод отримання поліноміальної регресії з наперед заданим степенем полінома виглядає:
def get_poly_regression(self, degree: int = 1):
self.polyreg = make_pipeline(PolynomialFeatures(degree=degree), (11)
LinearRegression())
Побудова поліноміальної моделі представлена наступним кодом:
def fit(self, y_empir: list):
y = self.transorm_list_to_pd_series(y_empir)ґ
x = self.transorm_list_to_pd_series([i + 1 for i in range(len(y_empir))])(12)
self.polyreg.fit(x, y)
Прогнозування з допомогою поліноміальної моделі виконується так:
def predict(self, x_pred: list):
if self.polyreg:(13)
return self.polyreg.predict(self.transorm_list_to_pd_series(x_pred))
Оцінювання адекватності моделі за допомогою коефіцієнта детермінації має вигляд:
def get_polyreg_score(self, y_empir: list, x_empir: Optional[list] = None):
y_series = self.transorm_list_to_pd_series(y_empir)
x = x_empir or [i + 1 for i in range(len(y_empir))](14)
x_series = self.transorm_list_to_pd_series(x)
return self.polyreg.score(x_series, y_series)
Для зручності отримання вільного члена поліноміального рівняння та коефіцієнтів створимо property:
@property
def coefs(self):
if self.polyreg:
return self.polyreg.steps[1][1].coef_(15)
@property
def intercept(self):(16)
if self.polyreg:
return self.polyreg.steps[1][1].intercept_
Також додамо функцію, що уможливлюватиме просте створення та використання побудованого класу:
def polyreg_prediction(data):
degree = data.get(“degree”)
y = data.get(“y”)
model_handler = PolyRegModel()
model_handler.get_poly_regression(int(degree))(17)
model_handler.fit(y)
x_pred = len(y)+1
y_pred = model_handler.predict([x_pred])[0]
coefs = model_handler.coefs.tolist()[0]
coefs[0] = model_handler.intercept.tolist()[0]
return {f”y{x_pred}”: str(y_pred), “coefs”: str(coefs),
“score”:str(model_handler.get_polyreg_score(y))}
Розробка проектів Python у локальних середовищах може стати досить складною, якщо одночасно розробляється кілька проєктів. Завантаження проєкту може зайняти деякий час, оскільки нам потрібно керувати версіями, встановлювати залежності та конфігурації для нього. Ми встановлювали всі вимоги проєкту безпосередньо в нашому локальному середовищі, а потім зосереджувалися на написанні коду. Але наявність декількох проєктів в одному середовищі швидко стає проблемою, оскільки ми можемо потрапити в конфлікт конфігурації або залежності. Більше того, коли ми ділимось проєктом, нам також потрібно координувати наше середовище. Для цього ми повинні визначити наше середовище проекту таким чином, щоб ним було легко ділитися. Хороший спосіб зробити це – створити ізольовані середовища розробки для кожного проекту. Це можна легко зробити, використовуючи контейнери та Docker Compose для управління ними [6].
Спосіб запустити наш код Python у контейнері – це запакувати його як образ Docker, а потім запустити контейнер на його основі. Для створення образу Docker нам потрібно створити Dockerfile, який містить інструкції, необхідні для створення образу. Потім файл Docker обробляється конструктором Docker, який генерує образ Docker. Потім за допомогою простої команди docker run ми створюємо та запускаємо контейнер із сервісом Python.
Створимо Dockerfile в директорії app, який складатиметься з наступних рядків:
# встановлюємо головний образ (ОС)
FROM python:3.8
# вказуємо робочу директорію у конейнері
WORKDIR app/
# копіюємо залежності в робочу директорію
COPY requirements.txt .
# та встановлюємо пакети та модулі, від яких залежить наша
# програма
RUN pip install -r requirements.txt
# копіюємо основне джерело коду
COPY src/ /app/src
# встановлюємо початкову команду після старту контейнера
CMD [ “python”, “src/server.py” ]
Для створення образу середовища з побудови поліноміальної моделі скористаємось командою:
docker build -t polyreg . (18)
Для кожної інструкції або команди з Dockerfile конструктор Docker генерує шар образу та укладає його на попередні. Тому образ Docker, отриманий в результаті процесу – це просто стек різних шарів, призначений лише для читання.
Виконавши команду docker images бачимо збудований образ нашої програми:
REPOSITORY TAG IMAGE ID CREATED SIZE
polyreg latest 73061e367f2a 3 minutes ago 1.32GB (19)
Для запуску контейнера можна скористатись командою:
docker run -i -t -p 5000:5000 polyreg (20)
Після запуску контейнера з’являється програмне середовище, здатне комунікувати з іншими програмами через application programming interface. Такий підхід уможливлює цифровізазацію не окремої дії, а створення ряду процесів, які взаємодіють між собою за певних обставин.
Для тесту працездатності програми здійснюється запит у вікні терміналу:
curl –location –request POST ‘localhost:5000/polyreg/predict’ –header ‘Content-Type: application/json’ –data-raw ‘{“y”:[0.0429, 0.1149, 0.1089, 0.1369, 0.1175, 0.2685, 0.3199, 0.4718, 0.182, 0.2449, 0.2663, 0.2468, 0.2102, 0.1697, 0.1888, 0.2372, 0.152, 0.1286, 0.1659, 0.2531], “degree”: 4}'(21)
На який отримаємо відповідь:
{“coefs”:”[0.01023611971108579, 0.02490556686026257, 0.007057685381208343, –
0.0009690132581711185, 2.915570430378836e-(22)
5]”,”score”:”0.5673554296926449″,”y21″:”[0.34189102]”}
Значення збігаються із значеннями з [1], що засвідчує адекватність реалізованого механізму. Змінюючи дані у запиті можемо перевірити й інші побудовані моделі з [1]:
Так, наприклад, для ut1 матимемо:
curl –location –request POST ‘localhost:5000/polyreg/predict’ –header ‘Content-Type: application/json’ –data-raw
{“y”:[0.8056,0.6667,0.8611,0.6944,0.8889,1.0000,0.8056,0.7500,0.8611,0.8333,0.77(23)
78,0.7222,0.8056,0.7500,0.8056,0.8056,0.8611,0.7778,0.7222,0.8333],
“degree”: 4}’
{“coefs”:”[0.671058475232529, 0.07293791632612227, -0.010535444359322427, (24)
0.0005638170344195552, -1.0153844016161373e-
05]”,”score”:”0.10972889857761714″,”y21″:”[0.80340357]”}
Висновки і перспективи подальших досліджень: Створений сервіс дає змогу цифризувати процес побудови поліноміальної регресії, що в свою чергу спрощує розрахунок і прогнозування зокрема інтегрального показника фінансової безпеки, а також інших динамічних рядів, використовуючи для цього API. Розміщення сервісу на віддаленому сервері з постійною IP адресою надає доступ до сервісу з будь-якої точки світу з використанням всемережжя. Планується розроблення інформаційної системи фінансової безпеки корпорації у вигляді мікросервісів задля своєчасного та навіть випереджувального виявлення потенційних загроз, а також розроблення механізмів допомоги прийняття рішень з використанням засобів штучного інтелекту.
Література
- Васильців Т.Г. Фінансово-економічна безпека підприємств України: стратегія та механізм забезпечення : монографія . Т. Г. Васильців, В. І. Волошин, О. Р. Бойкевич, В. В. Каркавчук, [за ред. Т.Г. Васильціва]. Львів : “Ліга-Прес”, 2012. 368 с.
- URL: https://scikit-learn.org/stable/index.html
- URL:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeat ures.html
- URL:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression .html ?highlight=linearregression#sklearn.linear_model.LinearRegression
- URL: https://pandas.pydata.org/
- URL: https://www.docker.com/
- URL: https://flask.palletsprojects.com/en/2.0.x/
Коментарі закрито.
To comment on the article - you need to download the candidate degree and / or doctor of Science