Gforce-ML's picture
remove seaborn
a0abb35
raw
history blame
13.1 kB
# imports
# ====================================
import numpy as np
import pandas as pd
import streamlit as st
import streamlit.components.v1 as components
import plotly.express as px
components.html(
"""
<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>
<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>
"""
)
st.markdown("<h1 style='text-align: center;'>Применение методов машинного обучения в анализе банкротства</h1>", unsafe_allow_html=True)
with open("./img.png", "rb") as f:
st.image(f.read(), use_column_width=True)
st.write(
"""
# Краткое описание задачи
Эффективное и заблаговременное прогнозирование банкротства компаний имеет важно значение для всех участников рынка. По мере развития информационного общества традиционные методы выявления банкротства становятся менее эффективными и более трудозатратными. Поэтому сочетание традиционных методов с современными моделями искусственного интеллекта может быть эффективно применено в современных экономических условиях.
Основная цель работы - оценить риск банкротства с помощью нескольких алгоритмов машинного обучения, сравнить результаты их работы, определить наилучшую модель и соответствующий набор признаков для прогнозирования банкротства компаний.
"""
)
st.write("""# Этапы разработки""")
#image = Image.open("./stages.jpg")
#st.image(image, output_format="auto", use_column_width="auto")
with open("./stages.png", "rb") as f:
st.image(f.read(), use_column_width=True)
with st.expander("Описание пайплайна работы", expanded=True):
st.write(
"""
### Этапы разработки
<b><i>1. Поиск и сбор данных:</b></i>
Был использован датасет из Тайваньского экономического журнала за период с 1999 по 2009 год. Банкротство компании было определено на основании правил ведения бизнеса Тайваньской фондовой биржи. (<a href="https://www.kaggle.com/datasets/fedesoriano/company-bankruptcy-prediction">Ссылка на данные</a>)
<b><i>2. Обработка (препроцессинг):</b></i>
Удаление ненужных колонок, one hot encoding категориальных переменных, заполнение пропущенных значений. С использованием библиотек pandas, numpy, seaborn.
<b><i>3. Анализ статистических показателей и визуализация:</b></i>
Инструменты для этого - с использованием библиотек pandas, seaborn.
<b><i>4. Выбор моделей, обучение и валидация модели с ними (без фичей):</b></i>
С использованием библиотек scikit-learn, pandas, seaborn.
<b><i>5. Выбор моделей, обучение и валидация модели с ними (с фичами):</b></i>
С использованием библиотек scikit-learn, pandas, seaborn.
<
b><i>6. Сравнение результатов:</b></i>
Анализ и графическое представление работы алгоритмов. При некорректной работе или плохим результатом проводится п. 4 и п. 5.
<b><i>7. Оформление микросервиса Streamlit:</b></i>
С использованием библиотеки streamlit.
""",
unsafe_allow_html=True
)
with st.expander("Описание пайплайна работы", expanded=True):
st.write(
"""
### Информация о применении методов машинного обучения для бизнес-задач:
Прогнозирование финансовой неустойчивости – важный компонент управления компанией. Из-за банкротства акционеры теряют доходы, бизнес, нарушаются цепочки поставок, фискальные органы лишаются налоговых поступлений, госорганы фиксируют снижение экономического роста и повышение социальной напряженности, а работники вынуждены искать новую работу. Поэтому получение ясной картины финансового и имущественного состояния компаний уже много лет является целью специалистов самых разных областей знаний.
Компании активно внедряют современные технологии в основную деятельность, автоматизируя большое количество бизнес-процессов. Это позволяет выстраивать, например, электронную экспертизу, c помощью которой возможно оперативно объединять множество экспертов из разных предметных областей для полного охвата рассматриваемой проблемы и принятия коллективного решения. Электронная экспертиза также подразумевает взаимодействие людей с интеллектуальными системами, которые способны строить анализ и прогнозы на основе более широкого пространства переменных. Так, в частности, методы машинного обучения применяются уже в значительном количестве бизнес-задач, в том числе для интеллектуальной аналитики больших данных, которые компания аккумулирует для построения моделей прогнозирования.
Однако риски банкротства могут также возникнуть из-за некорректного стратегического менеджмента. Такой менеджмент подразумевает разработку долгосрочных целей и действий, которые позволят достичь более высоких результатов в будущем, например, стать лидирующей компанией в своей отрасли. Разрабатываемые при этом стратегии обычно носят амбициозный характер, поэтому цели компании в таком случае не направлены на пролонгацию сложившейся динамики. Правильный анализ стратегической ситуации также важен для прогнозирования банкротства. Существует множество методов для ее оценки, в том числе и на основе анализа больших данных.<a href="http://infosoc.iis.ru/article/view/509"> Источник<a>
""",
unsafe_allow_html=True
)
# INFO
# =====================================
st.write(
"""
# 1. Информация о датасете
<b><i>Похожие наборы данных:</i></b>
- <a href="https://www.kaggle.com/datasets/fedesoriano/the-boston-houseprice-data">The Boston House-Price Data</a>
- <a href="https://www.kaggle.com/datasets/fedesoriano/gender-pay-gap-dataset">Gender Pay Gap Dataset</a>
- <a href="https://www.kaggle.com/datasets/fedesoriano/california-housing-prices-data-extra-features">Spanish Wine Quality Dataset</a>
<b><i>Про сами данные:</i></b>
Данные были получены из Тайваньского экономического журнала за период с 1999 по 2009 год. Банкротство компании было определено на основании правил ведения бизнеса Тайваньской фондовой биржи.
<i>P.S. Обновлены имена столбцов и описание, чтобы упростить понимание данных (Y = выходной объект, X = входной объект).</i>
""",
unsafe_allow_html=True
)
st.write(
"""
<b><i>Источник:</i></b>
Deron Liang and Chih-Fong Tsai, deronliang '@' gmail.com; cftsai '@' mgt.ncu.edu.tw, National Central University, Taiwan.
<a href="https://archive.ics.uci.edu/ml/datasets/Taiwanese+Bankruptcy+Prediction">The data was obtained from UCI Machine Learning Repository.</a>
<b><i>Статья:</i></b>
<a href="https://www.sciencedirect.com/science/article/abs/pii/S0377221716000412">Тык</a>
""",
unsafe_allow_html=True
)
data = pd.read_csv("./dataset.csv", sep=",")
st.write(""" ### Таблица с данными: """, data)
st.write(
"""
# 2. Обработка (препроцессинг)
"""
)
# PREPROCESS
# ==================================
st.write(""" ### Статистика:""")
st.code(
"""
data.describe()
"""
)
st.text(data.describe())
st.code(
"""
data.shape
"""
)
st.write(""" #### Shape данных (номер строк и столбцов):""")
st.text(data.shape)
#st.table(data) - лучше не запускать :)
data.columns = [i.title().strip() for i in list(data.columns)]
row = data.shape[0]
col = data.shape[1]
null_values = data.isnull().sum().sort_values(ascending=False).head()
st.code(
"""
null_values = data.isnull().sum().sort_values(ascending=False).head()
"""
)
st.write(null_values)
st.code(
"""
data.info()
"""
)
st.text(data.info)
st.write("""Поскольку пропущенных значений нет, мы можем перейти к анализу данных.""")
# VISUALIZATIONS
# ==================================
# values = st.sidebar.slider("Target", int(data["Bankrupt?"]))
st.write("""Тут должен быть график """)
with open("./plot_1.png", "rb") as f:
st.image(f.read(), use_column_width=True)
st.code(
"""
values = [0,1]
values = list(data[""].count())
f = px.histogram(values, x="Bankrupt?", nbins=15, title="Price distribution")
f.update_xaxes(title="Price")
f.update_yaxes(title="No. of listings")
st.plotly_chart(f)
"""
)
st.write(
"""
Записи кажутся сильно несбалансированными. Таким образом, необходимо рассмотреть возможность балансировки набора данных с помощью методов повышения или понижения дискретизации.
"""
)
st.write(
"""
С помощью data.info() мы заметили, что у нас есть большинство данных «float64». Категориальные данные различаются как двоичные 1 и 0, поэтому сохраняются как «int64». Мы разделяем числовые и категориальные данные для анализа нашего набора данных.
"""
)
st.code(
"""
numeric_features = data.dtypes[data.dtypes != 'int64'].index
categorical_features = data.dtypes[data.dtypes == 'int64'].index
data[categorical_features].columns.tolist()
""",
language="python"
)