Этот проект представляет собой end-to-end платформу для анализа данных peer-to-peer (P2P) кредитования. Платформа реализует медальонную архитектуру (Bronze, Silver, Gold) и включает в себя полный цикл работы с данными: от извлечения из реляционной базы данных до пакетного применения ML-моделей и визуализации в BI.
- Современный технологический стек: Docker, Airflow, Spark, HDFS, MinIO, MLflow, Superset.
- Медальонная архитектура: Четкое разделение данных на слои Bronze (сырые), Silver (очищенные) и Gold (витрины).
- Оркестрация на Airflow: Все ETL-процессы автоматизированы и управляются с помощью Apache Airflow.
- MLOps-цикл с MLflow: Полноценное отслеживание экспериментов, регистрация моделей и их версионирование.
- Интерактивная BI-аналитика: Дашборды в Apache Superset для визуализации ключевых метрик и результатов работы ML-моделей.
- Удобное управление: Единый интерфейс для управления всеми компонентами через
Makefile.
Платформа состоит из нескольких взаимосвязанных сервисов, оркестрируемых с помощью Docker Compose. Данные проходят через несколько этапов трансформации, образуя классический ETL/ML-пайплайн.
graph TD
subgraph Источник Данных
A[PostgreSQL] --> B{HDFS - Landing Zone};
end
subgraph ETL-пайплайн на Spark
B --> C[Delta Lake - Bronze];
C --> D[Delta Lake - Silver];
D --> E{DQ Checks};
E -- OK --> F[Delta Lake - Gold Витрины];
F --> G[BI-аналитика];
D --> H[ML Scoring];
end
subgraph MLOps-цикл
I[JupyterLab] --> J(MLflow Server);
J --> K[MinIO S3];
J --> L[PostgreSQL MLflow];
J --> H;
end
subgraph Аналитика и Визуализация
H --> M[Delta Lake - Predictions];
G(Apache Superset) --> F;
G --> M;
end
style A fill:#D6EAF8,stroke:#333,stroke-width:2px
style G fill:#D5F5E3,stroke:#333,stroke-width:2px
style I fill:#FCF3CF,stroke:#333,stroke-width:2px
Для запуска и управления платформой используется Makefile. Убедитесь, что у вас установлены Docker и Docker Compose.
Эти команды нужно выполнить один раз при первом запуске проекта.
# 1. Запустить все сервисы платформы в фоновом режиме
make up
# 2. Выполнить полную первоначальную настройку:
# - Загрузить данные из CSV в PostgreSQL
# - Настроить права доступа в HDFS
make setup-platformПосле первоначальной настройки можно запустить основной пайплайн, который обработает данные и создаст все слои вплоть до Gold.
# Запустить главный DAG в Airflow
make airflow-triggerВы можете отслеживать выполнение в Airflow UI: http://localhost:8080 (логин/пароль: admin/admin).
ETL-пайплайн только готовит данные. Модель нужно обучить вручную.
- Откройте JupyterLab:
http://localhost:8888 - Перейдите в папку
notebooks/. - Откройте и запустите все ячейки в ноутбуке
01_p2p_model_exploration_and_training.ipynb.
Это действие обучит модель, залогирует ее в MLflow и зарегистрирует с алиасом champion. Вы можете отслеживать эксперименты в MLflow UI: http://localhost:5001.
Теперь, когда модель обучена, можно применить ее ко всем данным для получения предсказаний.
# Запустить скрипт пакетного скоринга
make spark-run script=batch_scoring.pyЭтот шаг создаст таблицу gold.loans_with_predictions.
Финальный шаг — визуализация результатов.
- Откройте Superset:
http://localhost:8089(логин/пароль:admin/admin). - Настройте подключение к Trino:
- Settings -> Database Connections -> + DATABASE.
- Выберите Trino.
- SQLALCHEMY URI:
trino://superset@trino:8080/delta - Протестируйте и сохраните.
- Добавьте датасеты:
- Data -> Datasets -> + DATASET.
- Выберите
P2P Data Warehouse, схемуgoldи добавьте таблицы:gold_loans_by_stategold_monthly_trendsloans_with_predictions
- Создайте чарты и дашборд для анализа данных.
Makefile предоставляет удобный интерфейс для управления платформой.
make help: Показать все доступные команды.make up: Запустить все сервисы.make down: Остановить все сервисы.make restart: Перезапустить все сервисы.make logs s=<service_name>: Посмотреть логи конкретного сервиса (например,make logs s=spark-master).make shell s=<service_name>: Зайти в командную строку контейнера (например,make shell s=jupyterlab).make clean: (ОСТОРОЖНО!) Остановить сервисы и удалить все данные в томах (PostgreSQL, HDFS, MinIO).make nuke: (КРАЙНЕ ОПАСНО!) Уничтожить всё: контейнеры, тома, сети и образы проекта.
.
├── airflow/ # Конфигурация и DAG'и для Airflow
├── config/ # Централизованные конфигурационные файлы
├── data/ # Исходные данные (не отслеживаются Git)
├── docker/ # Dockerfile'ы для кастомных образов
├── notebooks/ # Jupyter-ноутбуки для анализа и ML
├── scripts/ # Вспомогательные скрипты
├── spark_apps/ # Spark-приложения для ETL и ML
├── superset/ # Конфигурация для Superset
├── docker-compose.yaml # Главный файл Docker Compose
├── Makefile # Пульт управления проектом
└── README.md # Этот файл