Team 36 — MIPT × Sber Hackathon
Develop an algorithm and web application for assessing technological risk in software release deployments, specifically for ETL (Extract, Transform, Load) procedures and data warehouse (DWH) computations.
The model evaluates 12 weighted risk factors:
| Parameter | Description |
|---|---|
| Business Importance | Criticality of affected business processes |
| Technical Complexity | Complexity of the release |
| Urgency | Deployment urgency |
| Data Quality | Quality of input data |
| Team Experience | Experience level of the deployment team |
| Regulatory Compliance | Alignment with regulatory requirements |
| Legal Impact | Potential legal consequences |
| Financial Risk | Financial exposure |
| Integration Level | Degree of system integration |
| Stability of Previous Releases | Historical release stability |
| Testing Maturity | Maturity of testing processes |
| Backup Plan | Availability of a rollback plan |
| Risk Level | Score Range |
|---|---|
| Low | < 2.0 |
| Medium | 2.0 – 2.99 |
| High | 3.0 – 3.99 |
| Very High | ≥ 4.0 |
Additional categories for legal and financial risk can block deployment regardless of overall score.
- Automated Assessment: Upload a CSV file for batch risk evaluation
- Manual Input: Enter parameters via web form for single-release assessment
- Visualization: Dynamic charts and styled tables for result interpretation
- Deployment: Flask web application deployed to production
- Backend: Flask (Python)
- Risk Engine: Weighted multi-parameter scoring with threshold classification
- Visualization: Matplotlib, Plotly
- Deployment: Vercel
This project implements the same architectural patterns used in credit scoring and SME risk assessment:
- Multi-factor weighted evaluation
- Threshold-based risk classification
- Interpretable output for decision support
- Batch and single-entity assessment modes
- Anna Traylor — Architecture & Code
- Sergey Sarapulov — Algorithm Optimization
- Maria Zemskova — Methodology Analysis
- Iosif Ababneh — Data Visualization
- Konstantin Cherkesov — Testing & Data Processing
- Vagiz Yakupov — Risk Ranking
Зоны ответственности:
- Анна Трэйлор – разработка архитектуры и кода
- Сергей Сарапулов – оптимизация алгоритмов
- Мария Земскова – анализ методик оценки
- Абабнех Иосиф – визуализация данных
- Константин Черкесов – тестирование и работа с данными
- Вагиз Якупов – ранжирование рисков
Сбер_презентация_Команда_36.pdf
Разработать алгоритм (модель, методику) и программу его реализующую для оценки технологического риска внедрений релизов программного обеспечения, предназначенного для выполнения процедур трансформации данных (ETL) и расчетов на витринах хранилища данных (DWH).
Проект предназначен для оценки технологических рисков внедрения релизов. Он позволяет:
- Автоматически анализировать данные из загруженного CSV-файла.
- Выполнять ручной ввод параметров для оценки риска.
- Генерировать графики и таблицы для визуализации результатов.
- Отображать результаты анализа в веб-интерфейсе.
Screen.Recording.2024-12-12.at.08.59.18.mov
Screen.Recording.2024-12-12.at.09.01.09.mov
├── Pipfile # Файл для управления виртуальной средой Python (используется с pipenv).
├── Procfile # Файл для указания команд деплоя (Heroku).
├── README.md # Основная документация проекта.
├── __pycache__/ # Кэшированные файлы Python (автоматически создаются).
├── app.py # Главный файл приложения Flask.
├── data/ # Папка с данными (например, загружаемые CSV-файлы).
│ ├── example.csv # Пример CSV-файла для анализа.
├── plots/ # Папка для сохранения графиков.
│ ├── example_plot.png # Пример графика, сгенерированного приложением.
├── requirements.txt # Список зависимостей для проекта.
├── risk_assessment.py # Логика расчёта и анализа рисков.
├── runtime.txt # Указание версии Python для платформы деплоя (например, Heroku).
├── static/ # Статические файлы (CSS, JS, изображения).
│ ├── styles.css # Стили для оформления приложения.
├── templates/ # HTML-шаблоны для Flask.
│ ├── index.html # Главная страница с формами загрузки и ручного ввода.
│ ├── results.html # Страница отображения результатов анализа.
├── tree_description.md # Дополнительное описание структуры проекта.
├── venv/ # Виртуальная среда Python для изолированной работы.
├── vercel.json # Конфигурация деплоя для Vercel.
- business_importance — Важность бизнес-процессов.
- technical_complexity — Техническая сложность.
- urgency — Срочность внедрения.
- data_quality — Качество данных.
- team_experience — Опыт команды.
- regulatory_compliance — Соответствие нормативным требованиям.
- legal_impact — Юридические последствия.
- financial_risk — Финансовый риск.
- integration_level — Уровень интеграции.
- stability_of_previous_releases — Стабильность предыдущих релизов.
- testing_maturity — Зрелость тестирования.
- backup_plan — Наличие резервного плана
Каждый параметр имеет вес, определяющий его влияние на итоговый уровень риска. Весовые коэффициенты задаются в коде.
Классификация уровней риска:
- Низкий: Итоговый балл < 2.
- Средний: 2 ≤ Итоговый балл < 3.
- Высокий: 3 ≤ Итоговый балл < 4.
- Очень высокий: Итоговый балл ≥ 4.
Также есть отдельные категории рисков: юридический и финансовый. В данном случае, проект не может быть обновлён на моменте оценки рисков из-за финансовых или юридических вопросов.
1. app.py Основной файл приложения Flask. Обрабатывает маршруты (/, /upload, /manual):
1.1. index()
- Описание: Отображает главную страницу с формой для загрузки файла и ручного ввода данных.
- Маршрут: /
- Возвращает: Шаблон index.html.
1.2. upload()
- Описание: Обрабатывает загруженные пользователем CSV-файлы.
- Маршрут: /upload
- Метод: POST
- Действия:
- Проверяет наличие загруженного файла.
- Считывает CSV-файл в pandas.DataFrame.
- Вычисляет оценку риска для каждой строки с использованием функций из risk_assessment.py.
- Генерирует график распределения рисков и визуализацию таблицы.
- Передаёт данные и графики в шаблон results.html.
- Возвращает: Шаблон results.html с таблицей и графиком.
1.3. manual()
- Описание: Обрабатывает данные, введённые вручную пользователем через форму.
- Маршрут: /manual
- Метод: POST
- Действия:
- Извлекает значения из формы и формирует DataFrame.
- Вычисляет оценку риска для введённых данных.
- Генерирует график и таблицу.
- Передаёт данные в шаблон results.html.
- Возвращает: Шаблон results.html с таблицей и графиком.
- Управляет обработкой данных, визуализацией и передачей данных в шаблоны.
2. risk_assessment.py
- Содержит алгоритмы для оценки и классификации рисков.
- Управляет визуализацией данных (графики, таблицы).
2.1. evaluate_risk(row)
- Описание: Рассчитывает оценку риска (Risk Score) для строки данных на основе весовых коэффициентов.
- Параметры:
- row: строка DataFrame с параметрами риска.
- Возвращает: Значение риска (число с плавающей запятой).
2.2. classify_risk(risk_score, row=None)
- Описание: Определяет уровень риска на основе значения Risk Score.
- Параметры:
risk_score: числовое значение риска.row: строка данных (необязательно), может использоваться для расширения логики.
- Возвращает: Уровень риска (строка: "Низкий", "Средний", "Высокий", "Очень высокий").
2.3. visualize_risks(data)
- Описание: Генерирует график распределения уровней риска.
- Параметры:
data: DataFrame, содержащий данные с колонкой Risk Level. - Возвращает: График в формате PNG, отрисованный в браузере.
2.4. visualize_table(data)
- Описание: Генерирует таблицу с увеличенным шрифтом и высотой строк для отображения результатов анализа.
- Параметры:
data: DataFrame с рассчитанными уровнями риска. - Возвращает: Таблицу в формате PNG.
3. requirements.txt Список зависимостей, необходимых для работы приложения. Устанавливается с помощью:
pip install -r requirements.txt
4. runtime.txt
Указывает версию Python для деплоя на Vercel: 3.11
5. Папка templates/ Содержит HTML-шаблоны для страниц приложения.
- index.html: Страница с формами для загрузки файла и ручного ввода данных.
- results.html: Страница для отображения результатов анализа (графики, таблицы).
6. Папка static/ Статические файлы (CSS для стилей, JS для интерактивности, изображения). styles.css: Файл стилей для оформления страниц.
7. Папка data/ Для хранения входных данных, таких как CSV-файлы.
8. Папка plots/ Для сохранения временных графиков, если нужно.
9. vercel.json Конфигурационный файл для деплоя на платформе Vercel. Пример:
{
"builds": [
{
"src": "app.py",
"use": "@vercel/python"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "app.py"
}
]
}
| Действие | Команда |
|---|---|
| Создать виртуальное окружение | python -m venv venv |
| Активировать (Windows) | venv\Scripts\activate |
| Активировать (Linux/MacOS) | source venv/bin/activate |
| Установить зависимости | pip install -r requirements.txt |
| Добавить зависимости в requirements.txt | pip freeze > requirements.txt |
| Деактивировать виртуальное окружение | deactivate |