Цифрова трансформація процесу прогнозування інтегрального показника фінансової безпеки компанії

Автор: , та

Анотація: У роботі розглянуто проблему моделювання фінансової безпеки підприємства, здійснено побудову уніфікованого інформаційного сервісу моделювання та прогнозування інтегрального показника фінансової безпеки.

Бібліографічний опис статті:

, та . Цифрова трансформація процесу прогнозування інтегрального показника фінансової безпеки компанії//Наука онлайн: Міжнародний електронний науковий журнал - 2021. - №10. - https://nauka-online.com/publications/information-technology/2021/10/21-4/

Стаття опублікована у: : Наука Онлайн No10 октябрь 2021

Інформаційні технології

Каркавчук Богдан Вікторович

магістр спеціальності інформаційних технологій в бізнесі

 кафедри цифрової економіки та бізнесу

Львівського національного університету імені Івана Франка

Каркавчук Валентин Вікторович

кандидат економічних наук

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 адресою надає доступ до сервісу з будь-якої точки світу з використанням всемережжя. Планується розроблення інформаційної системи фінансової безпеки корпорації у вигляді мікросервісів задля своєчасного та навіть випереджувального виявлення потенційних загроз, а також розроблення механізмів допомоги прийняття рішень з використанням засобів штучного інтелекту.

Література

  1. Васильців Т.Г. Фінансово-економічна безпека підприємств України: стратегія та механізм забезпечення : монографія . Т. Г. Васильців, В. І. Волошин, О. Р. Бойкевич, В. В. Каркавчук, [за ред. Т.Г. Васильціва]. Львів : “Ліга-Прес”, 2012. 368 с.
  2. URL: https://scikit-learn.org/stable/index.html
  3. URL:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeat ures.html
  4. URL:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression .html ?highlight=linearregression#sklearn.linear_model.LinearRegression
  5. URL: https://pandas.pydata.org/
  6. URL: https://www.docker.com/
  7. URL: https://flask.palletsprojects.com/en/2.0.x/

Перегляди: 370

Коментарі закрито.

To comment on the article - you need to download the candidate degree and / or doctor of Science

Підготуйте

наукову статтю на актуальну тему, відповідно до роздлів журналу

Відправте

наукову статтю на e-mail: editor@inter-nauka.com

Читайте

Вашу статтю на сайті нашого журналу та отримайте сертифікат