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