Spaces:
Runtime error
Runtime error
change app
Browse files
app.py
CHANGED
@@ -5,7 +5,8 @@ import numpy as np
|
|
5 |
import pandas as pd
|
6 |
import streamlit as st
|
7 |
import streamlit.components.v1 as components
|
8 |
-
|
|
|
9 |
|
10 |
|
11 |
components.html(
|
@@ -23,20 +24,20 @@ with open("./img.png", "rb") as f:
|
|
23 |
st.write(
|
24 |
"""
|
25 |
# Краткое описание задачи
|
26 |
-
Эффективное и заблаговременное прогнозирование банкротства компаний имеет важно значение для всех участников рынка. По мере развития информационного общества традиционные методы выявления банкротства становятся менее эффективными и более трудозатратными. Поэтому сочетание традиционных методов с современными моделями искусственного интеллекта может быть эффективно применено в современных экономических условиях.
|
27 |
-
|
28 |
-
Основная цель работы - оценить риск банкротства с помощью нескольких алгоритмов машинного обучения, сравнить результаты их работы, определить наилучшую модель и соответствующий набор признаков для прогнозирования банкротства компаний.
|
29 |
"""
|
30 |
)
|
31 |
|
32 |
st.write("""# Этапы разработки""")
|
33 |
|
34 |
-
image = Image.open("./stages.jpg")
|
35 |
-
st.image(image, output_format="auto", use_column_width="auto")
|
|
|
|
|
|
|
36 |
|
37 |
-
#with open("./stages.png", "rb") as f:
|
38 |
-
# st.image(f.read(), use_column_width=True)
|
39 |
-
|
40 |
|
41 |
with st.expander("Описание пайплайна работы", expanded=True):
|
42 |
|
@@ -57,8 +58,8 @@ with st.expander("Описание пайплайна работы", expanded=Tr
|
|
57 |
|
58 |
<b><i>5. Выбор моделей, обучение и валидация модели с ними (с фичами):</b></i>
|
59 |
С использованием библиотек scikit-learn, pandas, seaborn.
|
60 |
-
|
61 |
-
|
62 |
Анализ и графическое представление работы алгоритмов. При некорректной работе или плохим результатом проводится п. 4 и п. 5.
|
63 |
|
64 |
<b><i>7. Оформление микросервиса Streamlit:</b></i>
|
@@ -72,11 +73,130 @@ with st.expander("Описание пайплайна работы", expanded=Tr
|
|
72 |
st.write(
|
73 |
"""
|
74 |
### Информация о применении методов машинного обучения для бизнес-задач:
|
75 |
-
Прогнозирование финансовой неустойчивости – важный компонент управления компанией. Из-за банкротства акционеры теряют доходы, бизнес, нарушаются цепочки поставок, фискальные органы лишаются налоговых поступлений, госорганы фиксируют снижение экономического роста и повышение социальной напряженности, а работники вынуждены искать новую работу. Поэтому получение ясной картины финансового и имущественного состояния компаний уже много лет является целью специалистов самых разных областей знаний.
|
76 |
-
|
77 |
Компании активно внедряют современные технологии в основную деятельность, автоматизируя большое количество бизнес-процессов. Это позволяет выстраивать, например, электронную экспертизу, c помощью которой возможно оперативно объединять множество экспертов из разных предметных областей для полного охвата рассматриваемой проблемы и принятия коллективного решения. Электронная экспертиза также подразумевает взаимодействие людей с интеллектуальными системами, которые способны строить анализ и прогнозы на основе более широкого пространства переменных. Так, в частности, методы машинного обучения применяются уже в значительном количестве бизнес-задач, в том числе для интеллектуальной аналитики больших данных, которые компания аккумулирует для построения моделей прогнозирования.
|
78 |
-
|
79 |
Однако риски банкротства могут также возникнуть из-за некорректного стратегического менеджмента. Такой менеджмент подразумевает разработку долгосрочных целей и действий, которые позволят достичь более высоких результатов в будущем, например, стать лидирующей компанией в своей отрасли. Разрабатываемые при этом стратегии обычно носят амбициозный характер, поэтому цели компании в таком случае не направлены на пролонгацию сложившейся динамики. Правильный анализ стратегической ситуации также важен для прогнозирования банкротства. Существует множество методов для ее оценки, в том числе и на основе анализа больших данных.<a href="http://infosoc.iis.ru/article/view/509"> Источник<a>
|
80 |
""",
|
81 |
unsafe_allow_html=True
|
82 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
import pandas as pd
|
6 |
import streamlit as st
|
7 |
import streamlit.components.v1 as components
|
8 |
+
import seaborn as sns
|
9 |
+
import plotly.express as px
|
10 |
|
11 |
|
12 |
components.html(
|
|
|
24 |
st.write(
|
25 |
"""
|
26 |
# Краткое описание задачи
|
27 |
+
Эффективное и заблаговременное прогнозирование банкротства компаний имеет важно значение для всех участников рынка. По мере развития информационного общества традиционные методы выявления банкротства становятся менее эффективными и более трудозатратными. Поэтому сочетание традиционных методов с современными моделями искусственного интеллекта может быть эффективно применено в современных экономических условиях.
|
28 |
+
|
29 |
+
Основная цель работы - оценить риск банкротства с помощью нескольких алгоритмов машинного обучения, сравнить результаты их работы, определить наилучшую модель и соответствующий набор признаков для прогнозирования банкротства компаний.
|
30 |
"""
|
31 |
)
|
32 |
|
33 |
st.write("""# Этапы разработки""")
|
34 |
|
35 |
+
#image = Image.open("./stages.jpg")
|
36 |
+
#st.image(image, output_format="auto", use_column_width="auto")
|
37 |
+
|
38 |
+
with open("./stages.png", "rb") as f:
|
39 |
+
st.image(f.read(), use_column_width=True)
|
40 |
|
|
|
|
|
|
|
41 |
|
42 |
with st.expander("Описание пайплайна работы", expanded=True):
|
43 |
|
|
|
58 |
|
59 |
<b><i>5. Выбор моделей, обучение и валидация модели с ними (с фичами):</b></i>
|
60 |
С использованием библиотек scikit-learn, pandas, seaborn.
|
61 |
+
<
|
62 |
+
b><i>6. Сравнение результатов:</b></i>
|
63 |
Анализ и графическое представление работы алгоритмов. При некорректной работе или плохим результатом проводится п. 4 и п. 5.
|
64 |
|
65 |
<b><i>7. Оформление микросервиса Streamlit:</b></i>
|
|
|
73 |
st.write(
|
74 |
"""
|
75 |
### Информация о применении методов машинного обучения для бизнес-задач:
|
76 |
+
Прогнозирование финансовой неустойчивости – важный компонент управления компанией. Из-за банкротства акционеры теряют доходы, бизнес, нарушаются цепочки поставок, фискальные органы лишаются налоговых поступлений, госорганы фиксируют снижение экономического роста и повышение социальной напряженности, а работники вынуждены искать новую работу. Поэтому получение ясной картины финансового и имущественного состояния компаний уже много лет является целью специалистов самых разных областей знаний.
|
|
|
77 |
Компании активно внедряют современные технологии в основную деятельность, автоматизируя большое количество бизнес-процессов. Это позволяет выстраивать, например, электронную экспертизу, c помощью которой возможно оперативно объединять множество экспертов из разных предметных областей для полного охвата рассматриваемой проблемы и принятия коллективного решения. Электронная экспертиза также подразумевает взаимодействие людей с интеллектуальными системами, которые способны строить анализ и прогнозы на основе более широкого пространства переменных. Так, в частности, методы машинного обучения применяются уже в значительном количестве бизнес-задач, в том числе для интеллектуальной аналитики больших данных, которые компания аккумулирует для построения моделей прогнозирования.
|
|
|
78 |
Однако риски банкротства могут также возникнуть из-за некорректного стратегического менеджмента. Такой менеджмент подразумевает разработку долгосрочных целей и действий, которые позволят достичь более высоких результатов в будущем, например, стать лидирующей компанией в своей отрасли. Разрабатываемые при этом стратегии обычно носят амбициозный характер, поэтому цели компании в таком случае не направлены на пролонгацию сложившейся динамики. Правильный анализ стратегической ситуации также важен для прогнозирования банкротства. Существует множество методов для ее оценки, в том числе и на основе анализа больших данных.<a href="http://infosoc.iis.ru/article/view/509"> Источник<a>
|
79 |
""",
|
80 |
unsafe_allow_html=True
|
81 |
+
)
|
82 |
+
|
83 |
+
# INFO
|
84 |
+
# =====================================
|
85 |
+
|
86 |
+
st.write(
|
87 |
+
"""
|
88 |
+
# 1. Информация о датасете
|
89 |
+
<b><i>Похожие наборы данных:</i></b>
|
90 |
+
- <a href="https://www.kaggle.com/datasets/fedesoriano/the-boston-houseprice-data">The Boston House-Price Data</a>
|
91 |
+
- <a href="https://www.kaggle.com/datasets/fedesoriano/gender-pay-gap-dataset">Gender Pay Gap Dataset</a>
|
92 |
+
- <a href="https://www.kaggle.com/datasets/fedesoriano/california-housing-prices-data-extra-features">Spanish Wine Quality Dataset</a>
|
93 |
+
|
94 |
+
<b><i>Про сами данные:</i></b>
|
95 |
+
Данные были получены из Тайваньского экономического журнала за период с 1999 по 2009 год. Банкротство компании было определено на основании правил ведения бизнеса Тайваньской фондовой биржи.
|
96 |
+
|
97 |
+
<i>P.S. Обновлены имена столбцов и описание, чтобы упростить понимание данных (Y = выходной объект, X = входной объект).</i>
|
98 |
+
""",
|
99 |
+
unsafe_allow_html=True
|
100 |
+
)
|
101 |
+
|
102 |
+
st.write(
|
103 |
+
"""
|
104 |
+
<b><i>Источник:</i></b>
|
105 |
+
Deron Liang and Chih-Fong Tsai, deronliang '@' gmail.com; cftsai '@' mgt.ncu.edu.tw, National Central University, Taiwan.
|
106 |
+
<a href="https://archive.ics.uci.edu/ml/datasets/Taiwanese+Bankruptcy+Prediction">The data was obtained from UCI Machine Learning Repository.</a>
|
107 |
+
|
108 |
+
<b><i>Статья:</i></b>
|
109 |
+
<a href="https://www.sciencedirect.com/science/article/abs/pii/S0377221716000412">Тык</a>
|
110 |
+
""",
|
111 |
+
unsafe_allow_html=True
|
112 |
+
)
|
113 |
+
|
114 |
+
data = pd.read_csv("./dataset.csv", sep=",")
|
115 |
+
|
116 |
+
st.write(""" ### Таблица с данными: """, data)
|
117 |
+
|
118 |
+
st.write(
|
119 |
+
"""
|
120 |
+
# 2. Обработка (препроцессинг)
|
121 |
+
"""
|
122 |
+
)
|
123 |
+
|
124 |
+
# PREPROCESS
|
125 |
+
# ==================================
|
126 |
+
|
127 |
+
st.write(""" ### Статистика:""")
|
128 |
+
st.code(
|
129 |
+
"""
|
130 |
+
data.describe()
|
131 |
+
"""
|
132 |
+
)
|
133 |
+
st.text(data.describe())
|
134 |
+
st.code(
|
135 |
+
"""
|
136 |
+
data.shape
|
137 |
+
"""
|
138 |
+
)
|
139 |
+
st.write(""" #### Shape данных (номер строк и столбцов):""")
|
140 |
+
st.text(data.shape)
|
141 |
+
|
142 |
+
#st.table(data) - лучше не запускать :)
|
143 |
+
|
144 |
+
data.columns = [i.title().strip() for i in list(data.columns)]
|
145 |
+
row = data.shape[0]
|
146 |
+
col = data.shape[1]
|
147 |
+
|
148 |
+
null_values = data.isnull().sum().sort_values(ascending=False).head()
|
149 |
+
st.code(
|
150 |
+
"""
|
151 |
+
null_values = data.isnull().sum().sort_values(ascending=False).head()
|
152 |
+
"""
|
153 |
+
)
|
154 |
+
st.write(null_values)
|
155 |
+
|
156 |
+
st.code(
|
157 |
+
"""
|
158 |
+
data.info()
|
159 |
+
"""
|
160 |
+
)
|
161 |
+
st.text(data.info)
|
162 |
+
st.write("""Поскольку пропущенных значений нет, мы можем перейти к анализу данных.""")
|
163 |
+
|
164 |
+
# VISUALIZATIONS
|
165 |
+
# ==================================
|
166 |
+
|
167 |
+
# values = st.sidebar.slider("Target", int(data["Bankrupt?"]))
|
168 |
+
st.write("""Тут должен быть график """)
|
169 |
+
|
170 |
+
with open("./plot_1.png", "rb") as f:
|
171 |
+
st.image(f.read(), use_column_width=True)
|
172 |
+
|
173 |
+
st.code(
|
174 |
+
"""
|
175 |
+
values = [0,1]
|
176 |
+
values = list(data[""].count())
|
177 |
+
f = px.histogram(values, x="Bankrupt?", nbins=15, title="Price distribution")
|
178 |
+
f.update_xaxes(title="Price")
|
179 |
+
f.update_yaxes(title="No. of listings")
|
180 |
+
st.plotly_chart(f)
|
181 |
+
"""
|
182 |
+
)
|
183 |
+
|
184 |
+
st.write(
|
185 |
+
"""
|
186 |
+
Записи кажутся сильно несбалансированными. Таким образом, необходимо рассмотреть возможность балансировки набора данных с помощью методов повышения или понижения дискретизации.
|
187 |
+
"""
|
188 |
+
)
|
189 |
+
st.write(
|
190 |
+
"""
|
191 |
+
С помощью data.info() мы заметили, что у нас есть большинство данных «float64». Категориальные данные различаются как двоичные 1 и 0, поэтому сохраняются как «int64». Мы разделяем числовые и категориальные данные для анализа нашего набора данных.
|
192 |
+
"""
|
193 |
+
)
|
194 |
+
st.code(
|
195 |
+
"""
|
196 |
+
numeric_features = data.dtypes[data.dtypes != 'int64'].index
|
197 |
+
categorical_features = data.dtypes[data.dtypes == 'int64'].index
|
198 |
+
|
199 |
+
data[categorical_features].columns.tolist()
|
200 |
+
""",
|
201 |
+
language="python"
|
202 |
+
)
|