├── DLS_cv_diploma_project ├── DLS_cv_diploma_project.ipynb └── README.md ├── DLS_p1_simpsons ├── README.md └── dls_p1_simpsons.ipynb ├── DLS_p2_semantic_segmentation ├── README.md └── dls_p2_semantic_segmentation.ipynb ├── DLS_p3_autoencoders ├── README.md └── dls_p3_autoencoders.ipynb ├── DLS_p4_gan ├── README.md └── dls_p4_gan.ipynb ├── DLS_p5_text_classification ├── README.md └── dls_p5_text_classification.ipynb ├── DLS_p6_language_modeling ├── README.md └── dls_p6_language_modeling.ipynb ├── DL_p1_age ├── README.md └── age_inference_pytorch_lightning.ipynb ├── ML_diploma_project ├── README.md └── diploma-project.ipynb ├── ML_p10_insurance ├── README.md └── insurance.ipynb ├── ML_p11_car_prices ├── README.md └── cars_prices.ipynb ├── ML_p12_time_series ├── README.md └── taxi.ipynb ├── ML_p13_texts ├── README.md └── bert.ipynb ├── ML_p14_cv ├── README.md └── resnet50.ipynb ├── ML_p1_yandex_music ├── README.md └── yandex_music.ipynb ├── ML_p2_data_preprocessing ├── README.md └── data_preprocessing.ipynb ├── ML_p3_real_estate ├── README.md └── real_estate.ipynb ├── ML_p4_stat_analysis ├── README.md └── stat_analysis.ipynb ├── ML_p5_games ├── README.md └── games.ipynb ├── ML_p6_telecom ├── README.md └── telecom.ipynb ├── ML_p7_bank_churn ├── README.md └── bank_customers.ipynb ├── ML_p8_oil_rigs ├── README.md └── oil_rigs.ipynb ├── ML_p9_gold ├── README.md └── gold_rush.ipynb ├── README.md ├── _config.yml ├── certificates ├── RLT-hack.pdf ├── certificate_SQL.png ├── diploma_eng.pdf ├── diploma_rus.pdf ├── hse_mlops.png ├── rezerv-3.pdf ├── rutube_hack.pdf ├── sert-ai.pdf ├── vk_hse_hack.pdf ├── yandex-en.pdf ├── yandex-ru.pdf ├── yandex_ML.pdf └── zakupki-hack.pdf ├── images ├── jusuhinina.jpg ├── mvasiljev.jpg ├── oivanova.jpg └── vsemionov.jpg └── presentations ├── check_doc_ai ├── README.md └── check_doc_ai.pdf ├── moscow_python_meetup_101 └── iForest PCA.pdf ├── moscow_python_meetup_91 ├── README.md └── python_dcap.pdf ├── moscow_python_meetup_98 └── python_dcap_nlp.pdf ├── moscow_python_meetup_99 └── HBOS_ECOD.pdf ├── phdays_fest_2025 └── michael_vasiljev_phd_anomaly.pdf ├── rutube_hack ├── README.md └── RuTube_Support_AI.pdf └── vk_hse_hack ├── README.md └── news_classification.pdf /DLS_cv_diploma_project/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Twemoji12_1f916.svg/480px-Twemoji12_1f916.svg.png 'Twemoji GitHub') 4 | 5 | В этом проекте мы будем решать задачу распознавания лиц. Мы обучим нейросеть и поиграем с различными функциями потерь и метриками. Обучение будем производить на наборе данных [CelebA dataset](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html). 6 | 7 | # Выводы 8 | В этом проекте мы решали задачу распознавания лиц. В общем случае задача поиска и распознавания лиц решается в несколько этапов: 9 | 10 | 1. обнаружение лица 11 | 2. выравнивание лица 12 | 3. распознавание лица 13 | 14 | Обычно за каждый из этапов отвечает отдельная нейронная сеть. В нашей работе мы сконцентрировались на решении только задачи распознавания. 15 | 16 | Мы описали процесс подготовки данных (фотографий лиц) для распознавания, который также разбивается на этапы: 17 | 1. для каждой фотографии определяются координаты элементов лица (глаз, носа, уголков рта) 18 | 2. каждая фотография вращается таким образом, чтобы координаты глаз располагались на заренее заданной горизонтальной линии; 19 | 3. каждая фотография масштабируется, чтобы размеры всех лиц были примерно схожими. 20 | 21 | В нашей работе мы использовали уже подготовленные данные, все фотографии были правильным образом развёрнуты и отмасштабированы. Всего в наших данных были фотографии 500 человек. 22 | 23 | Для базовой модели мы взяли нейросеть архитектуры `ResNext` и заменили ей классифицирующий слой. В качестве функции потерь мы использовали кросс-энтропию. После обучения на тестовой выборке нам удалось достичь значения целевой метрики `Accuracy > 70%`. 24 | 25 | Уже обученную базовую модель мы использовали для получения эмбедингов и анализа их косинусной близости. Идея заключалась в том, что если наша модель обучена правильно, косинусная близость эмбедингов различных фотографий одного и того же человека будет больше, чем эмбедингов фотографий разных людей. Для проверки нашей модели мы определили классы, которые есть как в обучающей, так и в тестовой выборке, а также классы, которые есть только в тестовой выборке. Затем мы построили две гистограммы: на одной мы отобразили косинусные близости всех эмбедингов фотографий одного и того же человека в обучающей и тестовой выборке. На второй гистограмме мы отобразили косинусные близости эмбедингов фотографий разных людей. 26 | 27 | Из полученных графиков видно, что оба распределения заметно отличаются друг от друга, а значит наша базовая модель была обучена правильно. 28 | 29 | Мы также описали и применили метрику `identification rate`. В отличие от метрики `Accuracy`, по которой мы оценивали базовую модель, `identification rate` позволяет понять, несколько хорошо наша модель будет справляться с классификацией ранее неизвестных лиц. Для наглядной оценики значения метрики мы построили график зависимости `TPR` (доля истинно положительных ответов модели) от `FPR` (доля ложно положительных ответов модели). 30 | 31 | Форма графика (выпуклость кривой) говорит о том, что наша модель обучилась и позволяет получать осмысленные предсказания. 32 | 33 | В рамках данной работы мы также провели эксперименты с функциями потерь `Triplet Loss` и `ArcFace Loss`. Эти функции потерь получают на вход эмбединги изображений и штрафуют нейросеть таким образом, чтобы эмбединги изображений одного класса (фотографий одного и того же человека) были ближе друг к другу, а эмбединги изображений разных классов (фотографий разных людей) были дальше друг от друга. Этот подход имеет важное преимущество: при появлении новых классов (фотографий новых людей) модель не приходится обучать заново, достаточно дообучить модель на новых данных. 34 | 35 | Для наглядности мы визуализировали `TSNE`-разложение эмбедингов после обучения модели с функциями потерь `Triplet Loss` и `ArcFace Loss`. 36 | 37 | На обоих графиках видно, что эмбединги изображений действительно группируются по классам, при этом группы различных классов легко визуально отделимы друг от друга. 38 | 39 | Благодаря обучению моделей с функциями потерь `Triplet` и `ArcFace` удалось добиться значений целевой метрики `Accuracy` 79 и 80 процентов соответственно. Значения метрик для всех трёх моделей приведены в таблице ниже. 40 | 41 | | Модель (функция потерь) | Значение `Accuracy` | 42 | | ----------------------- | ------------------- | 43 | | ResNext (cross-entropy) | 70 % | 44 | | ResNext (Triplet) | 79 % | 45 | | ResNext (ArcFace) | 80 % | 46 | 47 | Таким образом в данной работе мы показали, какие методы применяются при решении задачи распознавания лиц, какие метрики можно применять для оценки эффективности распознавания, какие функции потерь могут быть использованы для заметного повышения качества работы базовой модеи. 48 | 49 | Полученные модели могут применяться для решения различных задач: непосредственно для распознавания лиц, для поиска неизвестных (незарегистрированных) лиц в общем наборе фотографий, для поиска фотографий похожих лиц. 50 | -------------------------------------------------------------------------------- /DLS_p1_simpsons/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Homer_Simpson_graff.jpg/640px-Homer_Simpson_graff.jpg 'jaroh') 4 | 5 | Сегодня нам предстоить помочь телекомпании *FOX* в обработке их контента. Как известно, сериал "Симпсоны" идет на телеэкранах более 25 лет, и за это время скопилось очень много видеоматериала. Персоонажи менялись вместе с изменяющимися графическими технологиями, и Гомер Симпсон-2018 не очень похож на Гомера Симпсона-1989. В этом задании нам необходимо классифицировать персонажей, проживающих в Спрингфилде. 6 | 7 | # Выводы 8 | 9 | В данном проекте от нас требовалось обучить классификатор изображений персонажей мультсериала Симпсоны. В нашем распоряжении был набор из более чем 20 тысяч картинок. Метрика, по которой оценивается результат работы --- *F1*. 10 | 11 | Мы разделили набор данных на обучающую и валидационную выборки в соотношении 80% к 20% соответственно. Для удобства работы мы создали *DataModule* (класс, объединяющий загрузчики обучающих и валидационных изображений). 12 | 13 | К изображениям обучающей выборки мы применяем следующие трансформации (аугментации): 14 | 15 | * уменьшение до размера 224 на 224 (чтобы затем использовать предобученные модели) 16 | * случайное отображение по горизонтали 17 | * случайное вращение изображения на угол до 20 градусов 18 | * небольшое размытие 19 | * нормализация. 20 | 21 | К валиадционной выборке применялись лишь уменьшение изображение и нормализация. 22 | 23 | В качестве модели мы выбрали [*ResNext*](https://arxiv.org/abs/1611.05431). Данная модификация архитектуры *RexNet* была предложена в 2017 году и продемонстрировала хорошие результаты на соревновании *ImageNet*. В качестве направления дальнейшего развития данного проекта можно попробовать обучить модели с различными архитектурами (*DenseNet*, *ElasticNet* и т.д.) и сравнить их результаты. 24 | 25 | Обучение происходило с оптимизатором *AdamW* в течение 20 эпох. В качестве функции потерь была выбрана кросс-энтропия. 26 | 27 | На каждой эпохе обучения мы фиксировали значение функции потерь и метрики *F1*. 28 | 29 | После обучения мы получили предсказания на тестовых данных и загрузили их на платформу *kaggle*. Результирующее значение метрики *F1* на тестовой выборке (0.993) соответствует максимальному балу за данную задачу. 30 | -------------------------------------------------------------------------------- /DLS_p2_semantic_segmentation/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Typical_cnn.png/800px-Typical_cnn.png 'Aphex34') 4 | 5 | 6 | В данном проекте нам предстоит решить задачу сегментации медицинских снимков. В нашем распоряжении датасет [*ADDI project*](https://www.fc.up.pt/addi/ph2%20database.html). В нём содержатся фотографии различных поражений кожи: меланомы и родинок. Однако мы будем заниматься не классификацией, а сегментацией изображений, т.е. разделением изображений на несколько сегментов для упрощения последующего анализа и обработки. Проще говоря, нам необходимо обучить модель, которая сможет для каждого пикселя исходного изображения определить: изображена на нём родинка, либо просто участок кожи. 7 | 8 | Попробуем создать и обучить две модели для семантической сегментации: 9 | * [*SegNet*](https://arxiv.org/pdf/1511.00561.pdf), часто используемую на практике модель, базирующуюся на архитектуре *VGG16* для формирования энкодера; 10 | * [*U-Net*](https://arxiv.org/pdf/1505.04597.pdf), модель, изначально создававшуюся и оптимизированную для семантической сегментации медицинских изображений. 11 | 12 | В качестве эксперимента реализуем также несколько модификаций оригинальной модели *U-Net*: заменим некоторые слои на их аналоги и посмотрим, скажется ли это на результате. 13 | 14 | Также попробуем реализовать несколько функций потерь, чтобы оценить, насколько они влияют на конечный результат сегментации. 15 | 16 | # Вывод 17 | 18 | В данном проекте мы решали задачу сегментации медицинских снимков. В нашем распоряжении датасет [*ADDI project*](https://www.fc.up.pt/addi/ph2%20database.html). В нём содержатся фотографии различных поражений кожи: меланомы и родинок. 19 | 20 | Мы начали с того, что реализовали модель на основе архитектуры [*SegNet*](https://arxiv.org/pdf/1511.00561.pdf), в качестве функции потерь использовалась бинарную кросс-энтропию. Мы также реализовали несколько дополнительных функций потерь, чтобы проверить, как они скажутся на обучаемости модели. 21 | 22 | Каждая модель обучалась в течение 40 эпох с оптимизатором *AdamW*. В качестве метрики мы использовали [коэффициент Жаккара *(IoU)*](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%96%D0%B0%D0%BA%D0%BA%D0%B0%D1%80%D0%B0). 23 | 24 | Сведём данные по значениям метрики IoU на последних эпохах обучения для всех функций потерь. 25 | 26 | | Модель | Функция потерь | IoU (train) |IoU (valid) | 27 | |---------|----|---|---| 28 | | SegNet | BCE loss | 0.8291 |0.7981 | 29 | | SegNet | Dice loss | 0.7965 |0.7892 | 30 | | SegNet | Focal loss | 0.8061 |0.7680 | 31 | | SegNet | WSR loss | 0.7587 |0.8007 | 32 | 33 | Видно, что для всех функций потерь удалось достичь достаточно неплохих значений метрики *IoU*. Наилучшие результаты показала модель с функцией потерь WSR loss, однако результаты в целом различаются не очень сильно. 34 | 35 | Из построенных в рамках проекта графиков видно, что 40 эпох хватило, чтобы достичь сходимости для всех функций потерь. При этом стоит отметить, что для функции потерь *Dice loss* значения на графиках сходились стабильнее всего. 36 | 37 | Также мы обучили несколько моделей с различными вариациями архитектуры [*U-Net*](https://arxiv.org/abs/1505.04597). 38 | 39 | Первую модель мы реализовали в соответствии с оригинальной статьёй. Для пулинга (уменьшения размера изображений внутри сети) использовался _MaxPooling_, для апсамплинга (увеличения размера изображений внутри сети) - слои с обратной свёрткой _(ConvTranspose)_. 40 | 41 | Во второй модели для пулинга также использовался _MaxPooling_, а для апсмаплинга был применён _nearest-neighbor Upsampling_. 42 | 43 | В третьей модели для пулинга были применены свёрточные слои. 44 | 45 | Все три модели обучались с функцией потерь BCE. Для каждой модели рассчитывался коэффициент _IoU_. 46 | 47 | Сведём результаты экспериментов с U-Net в единую таблицу. 48 | 49 | | Модель | Функция потерь | IoU (train) |IoU (valid) | 50 | |---------|----|---|---| 51 | | U-Net | BCE loss | 0.8668 |0.8016 | 52 | | U-Net + upsampling | BCE loss | 0.8197 |0.8299 | 53 | | U-Net + convpool | BCE loss | 0.7938 |0.8327 | 54 | 55 | Видно, что в рамках наших экспериментов значения метрики _IoU_ для различных модификаций архитектуры _U-Net_ несколько выше, чем для модели _SegNet_. Наилучшего значения метрики на валидации удалось добиться при использовании свёрточного пуллинга. 56 | 57 | Модели на основе _U-Net_ показывают достаточно высокие значения метрики *IoU*, но они сходятся несколько хуже моделей на основе архитектуры *SegNet*. Наилучшую сходимость показала модель со свёрточным пуллингом. 58 | 59 | Из проведённых экспериментов видно, что на результаты модели оказывают существенное влияние различные факторы, в том числе выбор фукнции потерь и нюансов архитектуры. При их выборе следует учитывать несколько факторов: наилучшие значения метрики, стабильность сходимости модели, скорость обучения (количество обучаемых параметров модели). В рамках нашей задачи, если предположить, что заказчику важнее всего значение метрики *IoU*, наилучший результат продемонстрировала модель на основе архитектуры *U-Net* со свёрточным пуллингом. 60 | 61 | -------------------------------------------------------------------------------- /DLS_p3_autoencoders/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/3/37/Autoencoder_schema.png/528px-Autoencoder_schema.png 'Michela Massi') 4 | 5 | В данном проекте наша задача — написать и обучить несколько вариантов автокодировщиков, оценить их свойства и применимость для различных задач. Для этого мы будем использовать датасеты лиц [*(LFW)*](https://vis-www.cs.umass.edu/lfw/) и цифр *(MNIST)*. Во всех случаях мы будем применять достаточно простые свёрточные архитектуры и латентные вектора малых размеров, чтобы полученные результаты были более наглядными. 6 | 7 | # Выводы 8 | 9 | В данном проекте мы создали и обучили три автокодировщика с различными архитектурами: 10 | 11 | * обычный автокодировщик 12 | * вариационный автокодировщик 13 | * условный вариационный автокодировщик 14 | 15 | Для обучения мы использовали датасеты лиц *(LFW)* и цифр *(MNIST)*. 16 | 17 | Одной из целей данной работы было проведение экспериментов с автокодировщиками и оценка их применимости для различных задач. 18 | 19 | Для начала мы обучили обычный автокодировщик (простую архитектуру с тремя свёрточными и двумя линейными слоями) на датасете лиц. Мы сознательно выбрали небольшой размер латентного вектора, чтобы энкодер не мог сохранять картинки целиком, а был вынужден кодировать самые важные элементы изображения. 20 | 21 | Сначала мы проверили результаты работы обычного автокодировщика на сжатии и восстановлении фотографий. Полученные из декодера картинки сохраняли значительную часть элементов оригинала, хотя изображения полуались несколько размытыми. 22 | 23 | Затем мы сгенерировали несколько случайных лиц. Для этого мы посмотрели на распределения латентных векторов изображений из валидационной выборки и засемплировали несколько случайных выборок из этих распределений. Полученные изображения действительно были похожи на фотографии живых людей, хотя и довольно размытые. 24 | 25 | Также мы провели следующий эксперимент: отобрали несколько фотографий улыбающихся людей и несколько фотографий грустных людей. Закодировали их в латентные вектора и посчитали разницу. Полученный "вектор улыбки" мы добавили к латентным векторам грустных людей и пропустили через декодер. В результате мы получили фотографии улыбающихся людей. При этом возник интересный нюанс: в следствие особенностей выборки наша сеть решила, что в "вектор улыбки" входят и женские черты лица, поэтому они также перенеслись на декодированные фотографии. 26 | 27 | Затем мы обучили вариационный автоэнкодер. Особенностью данной архитектуры является то, что кодировщик учится отображать поступающие данные в пространство с заданными свойствами, так что при генерации новых изображений не приходится оценивать свойства распределения элементов латентных векторов. 28 | 29 | Для обучения вариационного автоэнкодера мы использовали датасет цифр MNIST. Нейросети было явно проще кодировать цифры, потому что получаемые из декодера изображения практически не отличались от подаваемых в энкодер. 30 | 31 | Мы также сгенерировали несколько изображений цифр из случайных данных, полученных из нормального распределения. Часть полученных картинок были похожи на цифры (хотя и очень неаккуратно написанные), а некоторые (например, цифры девять, восемь, семь) выглядели очень даже хорошо. И этого удалось достичь с очень простой архитектурой вариационного автоэнкодера (всего по два свёрточных слоя на энкодер и декодер). 32 | 33 | Мы также визуализировали латентные вектора вариационного автоэнкодера в двумерном пространстве. На полученном графике видно, что вектора различных цифр очень хорошо кластеризуются и визуально отделимы друг от друга. 34 | 35 | Наконец, мы построили и обучили на датасете цифр условный вариационный автоэнкодер. Особенностью данной архитектуры является возможность генерации изображений определённых класов "на заказ". Для демонстрации этой возможности мы сгенерировали из нормального распределения латентные вектора и получили из каждого изображения цифр пять и семь. У нас действительно получились изображения именно заданных классов. 36 | 37 | Полученные результаты экспериментов наглядно демонстрируют возможности различных архитектур автокодировщиков. Кроме того, автокодировщики часто применяются для уменьшения шума в данных или обнаружения аномальных значений. 38 | -------------------------------------------------------------------------------- /DLS_p4_gan/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/GAN_deepfake_white_girl.jpg/480px-GAN_deepfake_white_girl.jpg "") 4 | 5 | В этом проекте мы обучим нейросеть генерировать лица людей и посмотрим на то, как можно оценивать качество генерации. В качестве обучающей выборки возьмём датасет [Flickr-Faces](https://github.com/NVlabs/ffhq-dataset). 6 | 7 | Мы будем работать с [генеративно-состязательной сетью](https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE-%D1%81%D0%BE%D1%81%D1%82%D1%8F%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C), которая состоит из двух отдельных нейросетей: генератора и дискриминатора. Генератор создаёт изображения (в нашем случае - фотографии людей), а дискриминатор пытается отличить их от правильных (настоящих) фотографий. 8 | 9 | Фотография, приведённая над данным текстом, на самом деле была сгенерирована нейросетью. У нас врядли получится достичь такой же фотореалистичности, но в данной работе будут продемонстрированы основные подходы и некоторые трюки, применяемые при обучении генеративно-состязательных нейросетей. 10 | 11 | # Выводы 12 | 13 | В этом проекте мы обучали [генеративно-состязательную нейросеть `(GAN)`](https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE-%D1%81%D0%BE%D1%81%D1%82%D1%8F%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C) создавать лица людей. В качестве обучающей выборки мы взяли датасет [`Flickr-Faces`](https://github.com/NVlabs/ffhq-dataset). 14 | 15 | Генеративно-состязательная сеть состоит из двух отдельных нейросетей: генератора и дискриминатора. Генератор создаёт изображения (в нашем случае - фотографии людей), а дискриминатор пытается отличить их от правильных (настоящих) фотографий. 16 | 17 | Мы создали классы генератора и дискриминатора, а затем объекты этих классов поместили в класс `GAN`. В ходе обучения мы сохраняли значения функций потерь как генератора, так и дискриминатора. 18 | 19 | Для улучшения результатов мы применили несколько трюков: зашумляли изображения, подаваемые на вход дискриминатору, а также, вместо меток классов 0 и 1 использовали метки от 0.0 до 0.1 и от 0.9 до 1.0. Мы делали это для того, чтобы "усложнить жизнь" дискриминатору и дать генератору шанс обучиться. 20 | 21 | Из анализа результатов генерации на последней эпохе видно, что фотореалистичности добиться не удалось, что и не удивительно, учитывая простоту нашей модели. Изображения скорее похожи на искажённые фотографии плохого качества. Однако правдоподобность меняется от картинки к картинке: если не вглядываться, то некоторые изображения можно спутать с обычной фотографией. Достойный результат для очень простой нейросети! 22 | 23 | Так как оценивать качество генерации визуально не всегда удобно, мы реализовали дополнительный критерий оценки следующим образом: 24 | * сгенерировали столько же изображений, сколько есть настоящих в обучающей выборке 25 | * сгенерированным изображениям присвоили метку класса 0, настоящим - 1 26 | * посчитали [`leave-one-out`](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.LeaveOneOut.html) оценку: обучили классификатор ([`KNeighborsClassifier` при `n=1`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html)) предсказывать класс на всех объектах, кроме одного, а затем проверили качество (`accuracy`) на оставшемся объекте. 27 | 28 | Суть данной проверки довольно проста: если сгенерированные фотографии сильно отличаются от настоящих, то классификатор будет легко различать их и значение метрики `accuracy` будет близко к 1. Если же сгенерированные фотографии очень правдоподобны, то классификатор будет часто ошибаться и значение `accuracy` будет близко к 0.5. 29 | 30 | Нам удалось достичь значения метрики 0.846, то есть сгенерированные изображения всё же содержат существенные отличия от реальных, но и не совсем неправдоподобны, что совпрадает с результатами визуального анализа. 31 | 32 | Мы также реализовали дополнительную проверку результатов через визуализацию распределений. После снижения размерности изображений методом [`TSNE`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html) мы нанесли получившиеся точки на график. Такая визуализация показала, что часть точек реальных и сгенерированных изображений визуально разделимы и группируются в разные кластеры. Если бы наш генератор работал хорошо, то такого эффекта бы не было. 33 | 34 | -------------------------------------------------------------------------------- /DLS_p5_text_classification/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/NLP_-_isometric.svg/640px-NLP_-_isometric.svg.png "https://freepik.com") 4 | 5 | В этом проекте нам предстоит решить задачу классификации текстов. Мы будем использовать набор данных [`ag_news`](https://paperswithcode.com/dataset/ag-news). Это датасет для классификации новостей на 4 темы: *World, Sports, Business, Sci/Tech.* 6 | 7 | Классификацию мы будем производить с помощью рекуррентных нейросетей. Мы попробуем применить различные архитектуры (`RNN`, `LSTM`, `GRU`), а также подберём гипер-параметры, чтобы повысить качество моделей. Сравнивать модели между собой будем по метрике `accuracy`. 8 | 9 | # Выводы 10 | 11 | В ходе данной работы мы обучили несколько нейростевых моделей, относящих англоязычные тексты новостей к одному из четырёх классов: `World, Sports, Business, Sci/Tech`. Для этого мы использовали набор данных `ag-news`. В данном наборе примеры всех классов сбалансированы (в обучающей выборке приведено по 30 тысяч примеров новостей каждого класса). 12 | 13 | Все тексты из набора мы разделили на отдельные слова-токены с помощью библиотеки `nltk`, привели к нижнему регистру и удалили символы пунктуации. Чтобы уменьшить размер словаря мы исключили из него все слова, встречающиеся в тексте менее 25 раз. В результате в словарь нашей модели попало 11842 слова. 14 | 15 | Нашей целью было получение модели, классифицирующей тексты с дастаточно высоким значением метрики `accuracy`. Для этого мы провели несколько экспериментов с различными типами рекурентных архитектур (`RNN`, `LSTM`, `GRU`), различными значениями гипер-параметров (количество слоёв нейросети, размер скрытого представления, использование двунаправленных нейросетей, значение `dropout rate`) и различными видами обработки исходных данных (слой `embedding` без предобучения и на основе векторов `FastText`). 16 | 17 | Для сравнения эффективности моделей для каждого эксперимента мы строили графики значений функции потерь и метрики `accuracy` на всём периоде обучения. Во всех экспериментах модели обучались по 50 эпох. Если в ходе эксперимента удавалось достичь улучшения целевой метрики, значения гипер-параметров переносились в следующий эксперимент. 18 | 19 | Сведём данные по значениям метрики на валидационных данных на последних эпохах в таблицу. 20 | 21 | | Модель | `Accuracy` на валидации | 22 | | ------ | ----------------------- | 23 | | `RNN`, аггрегация max | 0.8869 | 24 | | `RNN`, аггрегация mean | 0.8847 | 25 | | `LSTM` | 0.8843 | 26 | | `GRU` | 0.8923 | 27 | | `GRU`, 2 слоя | 0.8872 | 28 | | `GRU`, 3 слоя | 0.8921 | 29 | | `GRU`, 4 слоя | 0.8904 | 30 | | `GRU`, 3 слоя, dropout 0.1 | 0.8981 | 31 | | `GRU`, 3 слоя, dropout 0.3 | 0.8860 | 32 | | `GRU`, скрытое представление 256 | 0.9012 | 33 | | `GRU`, скрытое представление 512 | 0.8994 | 34 | | `Bidirectional GRU` | 0.8987 | 35 | | `GRU` с векторами `FastText` | 0.9158 | 36 | 37 | Из таблицы видно, что наиболее заметных улучшений целевой метрики удавалось добиться при переходе на архитектуру `GRU`, увеличении скрытого представления и при использовании предобученных эмбеддингов на основе векторов `FastText`. 38 | 39 | Наилучшие результаты (значение метрики на валидации 0.9158) удалось достичь для последней модели. Мы также рассчитали для неё значение метрики на тестовых данных (0.9118). 40 | 41 | Для дальнейшего улучшения метрики можно попробовать использовать более новые нейросетевые архитектуры, например, трансформеры. 42 | -------------------------------------------------------------------------------- /DLS_p6_language_modeling/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/7/75/Sign_language_alphabet_%284%29.jpg 'Raziakhatun12') 4 | 5 | В данном проекте мы будем заниматься языковым моделированием. Обучим несколько нейросетевых моделей предсказывать слова на основе предыдущего текста. Такие модели можно будет использовать и для генерации текста. Качество предсказаний будем оценивать по [перплексии](https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%BF%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D1%8F). Обучать модели будем на наборе данных, составленном из комментариев на сервисе [IMDB](https://www.kaggle.com/datasets/lakshmi25npathi/imdb-dataset-of-50k-movie-reviews). 6 | 7 | # Выводы 8 | 9 | В данном проекте мы решали задачу языкового моделирования. Мы обучили несколько нейросетевых моделей предсказывать слова на основе предыдущего текста. Качество предсказаний мы оценивали по [перплексии](https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%BF%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D1%8F). Обучение моделей производилось на наборе данных, составленном из комментариев на сервисе [IMDB](https://www.kaggle.com/datasets/lakshmi25npathi/imdb-dataset-of-50k-movie-reviews). 10 | 11 | Мы предобработали данные, разбили их на отдельные предложения и сформировали словарь из 40 тысяч наиболее часто встречающихся слов. В этот словарь мы также добавили служебные слова-токены: 12 | * `` — токен для замены слов, отсутствующих в словаре *(unknown)* 13 | * `` — токен начала предложения *(begin of sentence)* 14 | * `` — токен конца предложения *(end of sentence)* 15 | * `` — токен паддинга *(padding)* 16 | 17 | Полученные таким образом данные были собраны в модуль, содержащий обучающую, валидационную и тестовую выборки. 18 | 19 | Для проведения экспериментов мы описали класс базовой модели. Базовая модель была представлена следующими слоями: 20 | 21 | * слой эмбедингов 22 | * рекуррентный слой (`RNN`, `LSTM` или `GRU`) 23 | * слой нормализации 24 | * линейный слой c `dropout` 25 | * нелинейный слой 26 | * слой получения предсказаний 27 | 28 | Взяв за основу базовую модель мы провели следующие эксперименты: 29 | 1. сравнили архитектуры `RNN`, `LSTM` и `GRU` 30 | 2. попробовали использовать предобученные эмбединги на основе векторов `FastText` 31 | 3. попробовали увеличить размер скрытого представления 32 | 4. увеличили количество рекуррентных слоёв и добавили `dropout` 33 | 34 | Результаты экспериментов представлены в таблице: 35 | 36 | | Модель | Перплексия | Сгенерированное предложение | 37 | | ------ | ---------- | --------------------------- | 38 | | `RNN` | 103.24 | ` the movie is a bit of a movie that is not a good movie . ` | 39 | | `LSTM` | 94.20 | ` the movie is a bit of a very good film . ` | 40 | | `GRU` | 95.09 | ` the movie is a bit slow , and it 's not a good movie . ` | 41 | | `LSTM` + `FastText` | 90.92 | ` the movie is a bit slow , but it 's not funny . ` | 42 | | `LSTM` + `FT`, `hidden_dim`: 512 | 86.75 | ` the movie is a very good movie . ` | 43 | | `LSTM` + `FT`, `hidden_dim`: 1024 | 87.86 | ` the movie is a bit of a letdown . ` | 44 | | `LSTM` + `FT`, `h_d`: 512, `n_layers`: 2, `dropout` | 83.67 | ` the movie is a bit slow and the pace is very slow and the story is very good . ` | 45 | 46 | Из вышеприведённой таблицы видно, что наименьшего значения целевой метрики на валидационных данных удалось достичь при использовании двухслойной `LSTM` с `dropout` с предобученными эмбедингами, полученными на основе векторов `FastText`, и увеличенным скрытым представлением. Данная модель была использована для получения значения перплексии на тестовых данных: 83.78, что немногим больше значения на валидационных данных. 47 | 48 | Из таблицы также видно, что все модели генерируют текст, похожий на осмысленный, но довольно странный. Единственное исключение — ` the movie is a bit of a letdown . `. Это может быть связано с тем, что во всех случаях мы использовали жадный алгоритм выбора следующего слова, возможно применение других алгоритмов позволило бы немного повысить качество создаваемого текста. Кроме того, можно попробовать обучить нашу модель на расширенной выборке, в которую можно включить 50 тысяч комментариев из набора `unsupervised`. Однако для получения наилучших результатов следует использовать более современные модели на основе механизма внимания, например, трансформеры. 49 | -------------------------------------------------------------------------------- /DL_p1_age/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Convolutional_Neural_Network_with_Color_Image_Filter.gif/640px-Convolutional_Neural_Network_with_Color_Image_Filter.gif 'Cecbur') 4 | 5 | Задача: построить модель, которая по фотографии человека могла бы предсказывать его возраст. Для обучения будем использовать набор данных [APPA-REAL](https://chalearnlap.cvc.uab.es/dataset/26/description/). 6 | 7 | # Выводы 8 | 9 | Мы построили модель определения возраста по фотографии. Для обучения мы применили библиотеки pytorch и Lightning, нейросеть ResNet50, предобученную на наборе ImageNet. 10 | 11 | В нашем распоряжении наборы фотографий, а также таблицы, в которых указан возраст человека на фотографии. Мы провели небольшое исследование данных. В учебной таблице содержатся записи о 4113 фотографиях. Средний возраст людей на них — 30 лет, медианный возраст — 28 лет. Есть фотографии людей с возрастом 1 год и 100 лет. 12 | 13 | При выводе 10 случайных фотографий с людей с возрастами старше 90 лет и моложе 5 лет мы не обнаружили фотографий с некорректно размеченным возрастом. 14 | 15 | Затем данные были подготовлены для обучения. Из всего набора файлов мы выделили файлы с лицами, загрузили их в класс DataSet, а затем передали его в класс DataLoader. 16 | 17 | Для обучения была создана нейросеть ResNet50. Эта нейросеть обучалась для решения задачи классификации на наборе данных ImageNet. Чтобы адаптировать её под наши задачи мы заменили ей "голову" и функцию потерь. Затем "заморозили" основные слои нейронной сети и провели несколько эпох обучения. 18 | 19 | В результате предварительного обучения средняя абсолютная ошибка на валидационных данных снизилась почти до семи лет, а на тестовых — до восьми. 20 | 21 | Чтобы улучшить данный результат мы разморозили несколько последних слоёв сети ResNet и продолжили обучение. 22 | 23 | Таким образом удалось снизить среднюю абсолютную ошибку на валидации почти до шести лет, а на тесте — до семи. 24 | 25 | При этом на построенных графиках видно, что основной вклад в ошибку вносят фотографии людей старше 60 лет, так их мало в обучающем наборе данных. При получении дополнительных фотографий можно ожидать улучшения качества модели. 26 | -------------------------------------------------------------------------------- /ML_diploma_project/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Steel_Melting_Process.jpg/303px-Steel_Melting_Process.jpg 'Afdmcc') 4 | 5 | Чтобы оптимизировать производственные расходы, металлургический комбинат ООО «Так закаляем сталь» решил уменьшить потребление электроэнергии на этапе обработки стали. Нам предстоит построить модель, которая предскажет температуру стали. 6 | 7 | # Выводы 8 | 9 | Сталь обрабатывают в металлическом ковше вместимостью около 100 тонн. Чтобы ковш выдерживал высокие температуры, изнутри его облицовывают огнеупорным кирпичом. Расплавленную сталь заливают в ковш и подогревают до нужной температуры графитовыми электродами. Они установлены в крышке ковша. 10 | 11 | Из сплава выводится сера (десульфурация), добавлением примесей корректируется химический состав и отбираются пробы. Сталь легируют — изменяют её состав — подавая куски сплава из бункера для сыпучих материалов или проволоку через специальный трайб-аппарат (англ. _tribe_, «масса»). 12 | 13 | Перед тем как первый раз ввести легирующие добавки, измеряют температуру стали и производят её химический анализ. Потом температуру на несколько минут повышают, добавляют легирующие материалы и продувают сплав инертным газом. Затем его перемешивают и снова проводят измерения. Такой цикл повторяется до достижения целевого химического состава и оптимальной температуры плавки. 14 | 15 | Тогда расплавленная сталь отправляется на доводку металла или поступает в машину непрерывной разливки. Оттуда готовый продукт выходит в виде заготовок-слябов (англ. _slab_, «плита»). 16 | 17 | Чтобы оптимизировать производственные расходы, металлургический комбинат ООО «Так закаляем сталь» решил уменьшить потребление электроэнергии на этапе обработки стали. Нам поставлена задача построить модель, которая предскажет температуру стали. 18 | 19 | Доступные нам данные состоят из файлов, полученных из разных источников: 20 | - `data_arc.csv` — данные об электродах; 21 | - `data_bulk.csv` — данные о подаче сыпучих материалов (объём); 22 | - `data_bulk_time.csv` — данные о подаче сыпучих материалов (время); 23 | - `data_gas.csv` — данные о продувке сплава газом; 24 | - `data_temp.csv` — результаты измерения температуры; 25 | - `data_wire.csv` — данные о проволочных материалах (объём); 26 | - `data_wire_time.csv` — данные о проволочных материалах (время). 27 | 28 | Количество строк в файлах различается от 3081 до 14876 штук. Дубликатов данных ни в одном файле обнаружено не было. Во всех файлах были найдены пропуски данных. Каждый файл содержит столбец `key`, возможно его можно будет использовать для объединения таблиц. 29 | 30 | Мы провели исследовательский анализ данных, в ходе которого было выявлено несколько проблем: 31 | 1. Во всех таблицах были выявлены пропуски данных. Природа части пропусков известна от заказчика. 32 | 2. Во всех колонках, содержащих данные о времени совершения операций, отсутствует информация о периоде 11, 12, 13 июля; 33 | 3. В некоторых колонках были выявлены подозрительные значения. Они могли появиться в данных например, в результате сбоя измерительного оборудования; 34 | 4. Были выявлены замеры температуры менее 1500 градусов; 35 | 5. Была выявлена партия с отрицательной реактивной мощностью; 36 | 4. Во всех таблицах количество уникальных значений в столбце `key` различается. 37 | 38 | Для подготовки данных к обучению мы удалили значения, которые по согласованию с заказчиком считаются выбросами. Затем мы обработали данные и сформировали дополнительные признаки: рассчитали энергию, переданную сплаву в результате нагрева и время, прошедшее между замерами температуры. Полученные таблицы мы объединили в одну, при этом использовались только те партии (ключи), инфомрация о которых была во всех объединяемых таблицах. 39 | 40 | Для получения предсказаний мы выбрали пять моделей: 41 | * линейную регрессию с регуляризацией (ElasticNet) 42 | * метод опорных векторов (SVR) 43 | * случайный лес (RandomForest) 44 | * градиентный бустинг (CatBoost) 45 | * голосующий ансамбль (VotingRegressor). 46 | 47 | Для сравнения моделей мы обучили каждую из них на кросс-валидации и получили значения метрики MAE. Результаты представлены в таблице ниже. 48 | 49 | *Таблица 1: Значения метрики MAE для различных моделей на кросс-валидации* 50 | 51 | | Модель | MAE (к.-в.) | 52 | |---|---| 53 | | ElasticNet | 6.12| 54 | | SVR | 6.51| 55 | | RandomForest | 5.92 | 56 | | CatBoost | 5.87 | 57 | | VotingRegressor | 5.78 | 58 | 59 | Наилучший результат показала модель на основе голосующего ансамбля. Её мы отобрали для получения предсказаний на тестовых данных. 60 | 61 | На тестовых данных значение метрики оказалось лишь немного выше значения на кросс-валидации. 62 | 63 | *Таблица 2: Значение метрики MAE для голосующего регрессора на тестовых данных* 64 | 65 | | Модель | MAE (тест) | 66 | |---|---| 67 | | VotingRegressor | 5.84| 68 | 69 | Мы также проверили, какие признаки больше всего сказываются на предсказаниях модели. Мы установили, что для определения итоговой температуры сплава важнее всего начальная температура и передаваемая сплаву энергия. 70 | -------------------------------------------------------------------------------- /ML_p10_insurance/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Нам нужно защитить данные клиентов страховой компании «Хоть потоп». Разработаем такой метод преобразования данных, чтобы по ним было сложно восстановить персональную информацию. Обоснуем корректность его работы. 4 | 5 | Нужно защитить данные, чтобы при преобразовании качество моделей машинного обучения не ухудшилось. Подбирать наилучшую модель не требуется. 6 | 7 | # Выводы 8 | 9 | В рамках данного проекта нам нужно было защитить данные клиентов страховой компании «Хоть потоп». Для этого требовалось разработать такой метод преобразования данных, чтобы по ним было сложно восстановить персональную информацию. 10 | 11 | При этом нужно было защитить данные, чтобы при преобразовании качество моделей машинного обучения не ухудшилось. Подбирать наилучшую модель не требовалось. 12 | 13 | Нам доступен файл с данными 5000 клинетов. Пропусков данных в файле нет. Было обнаружено 153 явных дупликата, которые мы отбросили. Было установлено, что в колонке `Возраст` тип данных можно изменить на целочисленный. 14 | 15 | Был проведён небольшой исследовательский анализ данных. После устранения незначительной проблемы с определением типа данных в столбце `Возраст` было установлено следующее: 16 | * в данных содержатся записи о клиентах-женщинах и клиентах-мужчинах, причём их примерно поровну 17 | * в данных содержится информация о клиентах возрастом от 18 до 65 лет, при этом значительной части клиентов от 24 до 37 лет 18 | * распределение зарплат клиентов похоже на нормальное со средним около 40000 и стандартным отклонением около 10000. При этом корреляции зарплаты и возраста клиента не наблюдается, что даёт основания предполагать, что данные — синтетические 19 | * у большинства клиентов до 2 членов семьи 20 | * большинство клиентов не получают страховых выплат — целевой признак не сбалансирован, что необходимо будет учесть при построении моделей 21 | * наблюдается значительная корреляция между возрастом клиента и количеством страховых выплат. 22 | 23 | В рамках выполнения проекта мы математически показали, что при умножении матрицы признаков $X$ на обратимую матрицу $P$ качество линейной регрессии не изменяется. Для этого мы продемонстрировали, что после умножнеия $X$ на $P$ вектор предсказаний модели не изменяется. 24 | 25 | На основании этого мы предложили следующий алгоритм защиты данных: 26 | 1. Данные разделяются на обучающие признаки и целевой признак 27 | 2. Создаётся случайная обратимая матрица 28 | 3. Матрица обучающих признаков умножается на новую матрицу 29 | 30 | Для проверки предложенного алгоритма мы создали две модели линейной регрессии. Первую модель обучили на обучающих признаках без изменений, вторую — на обучающих признаках, умноженных на случайную обратимую матрицу. Мы показали, что метрика $R_2$ у обоих регрессий не отличается, а значит у нас нет оснований полагать, что предложенный алгоритм защиты данных не работает. 31 | -------------------------------------------------------------------------------- /ML_p11_car_prices/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Сервис по продаже автомобилей с пробегом «Не бит, не крашен» разрабатывает приложение для привлечения новых клиентов. В нём можно быстро узнать рыночную стоимость своего автомобиля. В нашем распоряжении исторические данные: технические характеристики, комплектации и цены автомобилей. Нам нужно построить модель для определения стоимости. 4 | 5 | Заказчику важны: 6 | 7 | - качество предсказания; 8 | - скорость предсказания; 9 | - время обучения. 10 | 11 | # Выводы 12 | 13 | Сервис по продаже автомобилей с пробегом «Не бит, не крашен» разрабатывает приложение для привлечения новых клиентов. В нём можно быстро узнать рыночную стоимость своего автомобиля. В нашем распоряжении исторические данные: технические характеристики, комплектации и цены автомобилей. Нам нужно было построить модель для определения стоимости. 14 | 15 | Заказчику важны: 16 | 17 | - качество предсказания; 18 | - скорость предсказания; 19 | - время обучения. 20 | 21 | Нам доступен файл с примерно 350 тысячами записей об автомобилях. В некоторых колнках файла (`VehicleType`, `Gearbox`, `Model`, `FuelType`, `NotRepaired`) довольно много пропусков данных, которые надо было обработать. Также мы отметили, что названия колонок записаны в CamelCase, и для аккуратности их можно перевести их в snake_case. 22 | 23 | В колонках данных содержатся следующие сведения: 24 | 25 | - `DateCrawled` — дата скачивания анкеты из базы 26 | - `VehicleType` — тип автомобильного кузова 27 | - `RegistrationYear` — год регистрации автомобиля 28 | - `Gearbox` — тип коробки передач 29 | - `Power` — мощность (л. с.) 30 | - `Model` — модель автомобиля 31 | - `Kilometer` — пробег (км) 32 | - `RegistrationMonth` — месяц регистрации автомобиля 33 | - `FuelType` — тип топлива 34 | - `Brand` — марка автомобиля 35 | - `NotRepaired` — была машина в ремонте или нет 36 | - `DateCreated` — дата создания анкеты 37 | - `NumberOfPictures` — количество фотографий автомобиля 38 | - `PostalCode` — почтовый индекс владельца анкеты (пользователя) 39 | - `LastSeen` — дата последней активности пользователя 40 | 41 | Целевой признак: 42 | 43 | - `Price` — цена (евро) 44 | 45 | Мы провели исследовательский анализ, обаботку и финальную подготовку данных. 46 | 47 | В процессе исследовательского анализа были выявлены и устранены некоторые проблемы с данными. В ряде колонок были обнаружены и обработаны пропуски данных. Часть колонок содержали небольшое количество подозрительных или явно ошибочных данных. Такие данные пришлось удалить, чтобы они не исказили результаты работы обученных моделей. 48 | 49 | На этапе финальной подготовки данных были отобраны колоноки, которые будут использоваться для обучения моделей. Остальные колонки были отброшены, так как содержащиеся в них данные явно не связаны с определением цены автомобиля. 50 | 51 | Затем мы обучили четыре модели: CatBoost, нейросеть, LightGBM и "глупую" модель, которая всегда предсказывала среднее. Заказчика интересует время обучения, время предсказаний и значения метрики RMSE. 52 | 53 | Все показатели мы свели в единую таблицу. 54 | 55 | | Модель | Время обучения | Время предсказаний | RMSE (вал.) | 56 | |:--------------|-----------|------------|------------| 57 | | CatBoost | 51 сек | 859 миллисек | 1408 | 58 | | Нейросеть | 2 мин 19 cсек | 3 сек | 1604 | 59 | | LightGBM | 420 миллисек | 371 миллисек | 1461 | 60 | 61 | Из таблицы видно, что наилучшую точность предсказаний обеспечила модель CatBoost. Однако у модели LightGBM точность предсказаний сравнима, но время обучения и время предсказаний значительно меньше. При этом следует учитывать, что в отличие от CatBoost и нейронной сети LightGBM была собрана без поддержки GPU, а значит все вычисления производились на обычном процессоре. При компиляции бибилиотеки с поддержкой видеокарт следует ожидать дополнительного увеличения производительности. 62 | 63 | На основании полученных данных мы можем порекомендовать заказчику использовать модель на основе библиотеки LightGBM. Интересующие заказчика характеристики модели представлены в таблице ниже. 64 | 65 | | Модель | Время обучения | Время предсказаний | RMSE (вал.) | RMSE (тест) | 66 | |:--------------|-----------|------------|------------|------------| 67 | | LightGBM | 420 миллисек | 371 миллисек | 1461 | 1471 | 68 | 69 | -------------------------------------------------------------------------------- /ML_p12_time_series/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Компания «Чётенькое такси» собрала исторические данные о заказах такси в аэропортах. Чтобы привлекать больше водителей в период пиковой нагрузки, нужно спрогнозировать количество заказов такси на следующий час. Построим модель для такого предсказания. 4 | 5 | Значение метрики *RMSE* на тестовой выборке должно быть не больше 48. 6 | 7 | Задача: 8 | 9 | 1. Загрузить данные и выполнить их ресемплирование по одному часу. 10 | 2. Проанализировать данные. 11 | 3. Обучить разные модели с различными гиперпараметрами. Сделать тестовую выборку размером 10% от исходных данных. 12 | 4. Проверить данные на тестовой выборке и сделать выводы. 13 | 14 | # Выводы 15 | 16 | Нам был передан файл с более чем 26 тысячами записей за период с первого марта по 31 августа 2018 года. Пропусков данных нет. Количество заказов находится в столбце `num_orders`. 17 | 18 | В соответствии с требованиями заказчика было проведено ресемплирование данных по 1 часу. 19 | 20 | Чтобы сгладить данные мы рассчитали и построили графики скользящего среднего с окном в один день и в одну неделю. График скользящего среднего с окном в одну неделю наглядно показал плавный рост количества заказов со временем. 21 | 22 | Затем мы разделили данные на тренд, сезонность и шум. Рассчитанный тренд также продемонстрировал постепенный рост количества заказов. Алгоритм выделил сезонную составляюшую данных по дням. Пиковая нагрузка приходится на полночь, снижается до шести утра, а затем понемногу возрастает. Возможно это связано с временными циклами городских жителей: около полуночи многие едут домой из баров, а с шести утра спешат на работу. 23 | 24 | Для проверки ряда на стационарность мы расчитали скользящее среднее и скользящее стандартное отклонение. Из построенного графика видно, что скользящее среднее и скользящее стандартное отклонение меняются со временем, что говорит о нестационарности данных. Чтобы сделать временной ряд более стационарным нужно будет рассчитать разности временного ряда. 25 | 26 | Мы добавили в массив данных несколько дополнительных признаков. При этом часть признаков (месяц, день, день недели, час) мы добавили сразу, а количество оставшихся признаков мы подбирали оптимизатором *optuna*. 27 | 28 | Для прогнозирования временного ряда мы обучили и оптимизировали на кросс-валидации три модели: 29 | * линейную регрессию 30 | * LightGBM 31 | * голосующий ансамбль. 32 | 33 | Кроме того мы провели проверку на адекватность: обучили "глупую" модель, предсказывающую данные предыдущим значением. 34 | 35 | Сведём значения метрики RMSE для всех моделей в единую таблицу. 36 | 37 | | Модель | RMSE | 38 | |--------------|-----------| 39 | | Линейная регрессия | 26.02 | 40 | | LightGBM | 24.03 | 41 | | Голосующий ансамбль | 23.53 | 42 | | «Глупая» модель | 58.86 | 43 | 44 | Для проведения тестирования мы отобрали модель на основе голосующего ансамбля. Затем мы рассчитали значение метрики на тестовых данных: RMSE=44.27. Метрика оказалась ниже, чем пороговое значение, установленное заказчиком (48). Именно эту модель мы рекомендуем заказчику. 45 | -------------------------------------------------------------------------------- /ML_p13_texts/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Интернет-магазин «Викишоп» запускает новый сервис. Теперь пользователи могут редактировать и дополнять описания товаров, как в вики-сообществах. То есть клиенты предлагают свои правки и комментируют изменения других. Магазину нужен инструмент, который будет искать токсичные комментарии и отправлять их на модерацию. 4 | 5 | # Выводы 6 | 7 | Мы загрузили данные и немного познакомились с ними. В нашем распоряжении файл с почти 160 тысячами комментариев. Пропусков данных нет, явных дупилкатов данных нет. 8 | 9 | Классы не сбалансированы, данных без признака токсичности сильно больше. 10 | 11 | Мы попробовали решить задачу несколькими способами. 12 | 13 | Для начала мы сравнили модели на основе логистической регрессии, метода опроных векторов и гребневой регрессии. Предварительно мы провели леммаизацию признаков с помощью библиотеки *nltk*. Модель линейной регресии показала наивысшее значение метрики *ROC-AUC*, поэтому мы отобрали её для дальнейшего обучения. После подобора гипер-параметров и выбора оптимального порога модель обеспечила значение метрики *F1*=0.78. 14 | 15 | Затем мы применили две модели на основе нейросетей. Для их использования нам понадобилось использовать видеокарты. 16 | 17 | Модель на основе библиотеки *fast.ai* после обучения смогла классифицировать комментарии довольно точно, значение метрики *F1* составило 0.82. 18 | 19 | Предобученная модель *BERT* из библиотеки *HuggingFace* делелала предсказания довольно долго, но в конце дотянула метрику *F1* до великолепного 0.94. 20 | 21 | Сведём результаты моделей в единую таблицу. 22 | 23 | | Item | F1 | 24 | |--------------|-----------| 25 | | Логистическая регрессия | 0.78 | 26 | | fast.ai (LSTM) | 0.82 | 27 | | HuggingFace (BERT) | 0.94 | 28 | 29 | Исходя из значения метрики *F1* мы можем рекомендовать заказчику нейросетевую модель *BERT*. Однако если заказчику важно ещё и время расчётов предсказаний, то можно рассмотреть возможность применения модели на основе библиотеки *fast.ai* (высокая скорость предсказаний и неплохая точность). 30 | -------------------------------------------------------------------------------- /ML_p14_cv/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Сетевой супермаркет «Хлеб-Соль» внедряет систему компьютерного зрения для обработки фотографий покупателей. Фотофиксация в прикассовой зоне поможет определять возраст клиентов, чтобы: 4 | 5 | * Анализировать покупки и предлагать товары, которые могут заинтересовать покупателей этой возрастной группы; 6 | * Контролировать добросовестность кассиров при продаже алкоголя. 7 | 8 | Необходимо построить модель, которая по фотографии определит приблизительный возраст человека. В нашем распоряжении набор фотографий людей с указанием возраста. 9 | 10 | # Выводы 11 | 12 | Мы построили модель, которая по фотографии человека определяет его возраст со средней ошибкой в 7,2 года. 13 | 14 | Заказчик планирует использовать её чтобы: 15 | 16 | * Анализировать покупки и предлагать товары, которые могут заинтересовать покупателей этой возрастной группы; 17 | * Контролировать добросовестность кассиров при продаже алкоголя. 18 | 19 | Можно утверждать, что качество модели может быть достаточно для того, чтобы решать первую задачу. Если предположить, что возрастные группы будут определяться примерно так: подростки (до 18 лет), молодёжь (от 18 до 35 лет), средний возраст (от 35 до 50 лет), старшее поколение (от 50 лет и старше), то в большинстве случаев мы будем правильно предсказывать возрастную группу. 20 | 21 | С другой стороны, качество модели недостаточно для того, чтобы автоматизировать контроль добросовестности кассиров при продаже алкоголя. Модель можно использовать лишь для предотбора случаев продажи алкоголя с последующим контролем со стороны человека. Например, можно фиксировать все случаи продажи алкоголя покупателям с предсказанным возрастом до 30 лет и отправлять их для контроля ответственному лицу. 22 | 23 | Стоит также отметить, что у нас относительно мало фотографий людей старшего возраста (старше 50 лет). Возможно при добавлении в выборку фотографий людей этого возраста метрика модели может улучшиться. 24 | -------------------------------------------------------------------------------- /ML_p1_yandex_music/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | Нам доступен файл с данными о пользователях сервиса Яндекс.Музыка из Москвы и Санкт-Петербурга. Необходимо провести базовое сравнение муызкальных предпочтений пользователей из двух столиц. 3 | 4 | **Цель исследования** — проверить три гипотезы: 5 | 1. Активность пользователей зависит от дня недели. Причём в Москве и Петербурге это проявляется по-разному. 6 | 2. В понедельник утром в Москве преобладают одни жанры, а в Петербурге — другие. Так же и вечером пятницы преобладают разные жанры — в зависимости от города. 7 | 3. Москва и Петербург предпочитают разные жанры музыки. В Москве чаще слушают поп-музыку, в Петербурге — русский рэп. 8 | 9 | # Выводы 10 | 11 | На этапе предварительной обработки данных были выявлены и устранены следующие проблемы в данных: 12 | 13 | - нарушения в стиле заголовков, 14 | - пропущенные значения, 15 | - дубликаты — явные и неявные. 16 | 17 | Пропущенные значения были заменены на `'unknown'`. 18 | 19 | Затем была проведена проверка всех трёх гипотез, в ходе которой установлено: 20 | 21 | 1. день недели по-разному влияет на активность пользователей в Москве и Петербурге. Первая гипотеза полностью подтвердилась. 22 | 23 | 2. музыкальные предпочтения не сильно меняются в течение недели — будь то Москва или Петербург. Небольшие различия заметны в начале недели, по понедельникам: в Москве слушают музыку жанра _“world”_, а в Петербурге — джаз и классику. Таким образом, вторая гипотеза подтвердилась лишь отчасти. Этот результат мог оказаться иным, если бы не пропуски в данных. 24 | 25 | 3. во вкусах пользователей Москвы и Петербурга больше общего чем различий. Вопреки ожиданиям, предпочтения жанров в Петербурге напоминают московские. Третья гипотеза не подтвердилась. Если различия в предпочтениях и существуют, на основной массе пользователей они незаметны. 26 | -------------------------------------------------------------------------------- /ML_p2_data_preprocessing/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Имеются данные о клиентах банка, желающих взять кредит. По имеющимся данным необходимо оценить, влияют ли семейное положение и количество детей клиента на факт погашения кредита в срок. 4 | 5 | Результаты исследования могут быть использованы при построении модели кредитного скоринга — системы, которая оценивает способность потенциального заёмщика вернуть кредит банку. 6 | 7 | # Выводы 8 | 9 | После предварительной обработки данных (удаления дубликатов и пропусков) данные о клиентах были сгруппированы по уровням дохода и по целям кредитов. 10 | 11 | После анализа обработанных данных удалось выявить зависимость между семейным положением, наличием детей, целью кредита и вероятностью возникновения проблем с возвратом кредита в срок. Было установлено, что меньше всего проблем с возвратом кредита в срок возникает у клиентов без детей, вдовцов или вдов, у клиентов со средним уровнем дохода и у клиентов берущих кредит на операции с недвижимостью. 12 | -------------------------------------------------------------------------------- /ML_p3_real_estate/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | В нашем распоряжении данные сервиса Яндекc Недвижимость — архив объявлений о продаже квартир в Санкт-Петербурге и соседних населённых пунктах за несколько лет. Нужно научиться определять рыночную стоимость объектов недвижимости. Наша задача — установить параметры. Это позволит построить автоматизированную систему: она отследит аномалии и мошенническую деятельность. 4 | 5 | По каждой квартире на продажу доступны два вида данных. Первые вписаны пользователем, вторые получены автоматически на основе картографических данных. Например, расстояние до центра, аэропорта, ближайшего парка и водоёма. 6 | 7 | # Выводы 8 | 9 | В результате анализа данных было выявлено, что: 10 | * медианное время продажи квартиры составляет примерно 100 дней; 11 | * на цену квартиры оказывает значительное влияние её площадь; 12 | * по мере удаления от центра города средняя стоимость квартиры снижается; 13 | * средняя стоимость квадратного метра на первом и последнем этажах ниже, чем на других этажах; 14 | * центральная зона Санкт-Петербурга (зона с наиболее высокой средней ценой квадратного метра) находится в пределах 7 км от центра города; 15 | * в центральной зоне ценообразование зависит от тех же факторов, что и в остальном городе, но в ней не наблюдается стольже ярковыраженной зависимости средней стоимости квадратного метра от расстояния до центра города; 16 | * на рассматриваемом временном промежутке средняя стоимость квадратного метра не зависит от даты публикации объявления. 17 | -------------------------------------------------------------------------------- /ML_p4_stat_analysis/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Имеются несколько наборов данных от федерального оператора сотовой связи «Мегалайн». Клиентам «Мегалайна» доступны два тарифа: «Смарт» и «Ультра». Чтобы скорректировать рекламный бюджет необходимо установить, какой тариф приносит компании больше денег. 4 | 5 | # Выводы 6 | 7 | Мы установили, что пользователи тарифа _ultra_ в среднем в месяц разговаривают дольше, отправляют больше сообщений и используют больший объём трафика, чем пользователи тарифа _smart_. 8 | 9 | | | Смарт | Ультра | 10 | |--------------|-----------|------------| 11 | | Сред. продолжит. звонков в мес. (мин) | 421 | 547 | 12 | | Сред. количество сообщений в мес. (шт) | 38 | 65 | 13 | | Сред. объём трафика в мес. (Гб) | 42 | 39 | 14 | 15 | В результате анализа данных была показана статистически значимая разница между уровнями месячных расходов клиентов компании с тарифом _ultra_ и _smart_. Исходя из результатов анализа можно сделать вывод, что клиенты с тарифом _ultra_ приносят компании больше прибыли, что необходимо учитывать при формировании рекламных бюджетов. 16 | 17 | Была также проверена гипотеза о том, что ежемесячная прибыль от клиентов из Москвы больше, чем от клиентов из других регионов. В ходе эксперимента подтверждения данной гипотезы обнаружить не удалось. 18 | -------------------------------------------------------------------------------- /ML_p5_games/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Имеется файл с историческими данными о продажах игр, оценках пользователей и экспертов, жанрами и платформами (например, _Xbox_ или _PlayStation_). Необходимо выявить определяющие успешность игры закономерности. Это позволит сделать ставку на потенциально популярный продукт и спланировать рекламные кампании. 4 | 5 | Файл с данными был подготовлен в 2016 году, исследование проводится для 2017 года. 6 | 7 | # Выводы 8 | 9 | При работе над проектом был проанализирован ряд характеристик, которые потенциально могут влиять на продажи игр. Было установлено, что: 10 | * в 2016 году наиболее перспективными платформами были _PS4_, _3DS_, _XOne_; 11 | * отзывы критиков слабо влияют на общие продажи игр; 12 | * отзывы пользователей практически не влияют на общие продажи игр; 13 | * лучше всего продаются игры в жанре «шутер»; 14 | * предпочтения пользователей из Европы и США в целом схожи: они предпочитают играть в шутеры и спортивные игры на популярных платформах, чаще всего покупают игры с рейтингом M; 15 | * предпочтения пользователей из Японии иные: они предпочитают ролевые игры и сумуляции на платформах 3DS и DS, при этом мы не можем сделать полноценный и однозначный вывод о влиянии рейтингов на продажи игр: для этого необходимо добавить в таблицу данные о рейтингах японских игр, присвоенных организацией [CERO](https://en.wikipedia.org/wiki/Computer_Entertainment_Rating_Organization); 16 | * средние пользовательские рейтинги для платформ _Xbox One_ и _PC_ не различаются; 17 | * средние пользовательские рейтинги для игр жанров _Action_ и _Sports_ значимо различаются. 18 | 19 | Полученные результаты можно использовать на этапе подготовки к разработке новых игр для выбора платформ, жанра и потенциальных рынков сбыта. 20 | -------------------------------------------------------------------------------- /ML_p6_telecom/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Оператор мобильной связи «Мегалайн» выяснил: многие клиенты пользуются архивными тарифами. Они хотят построить систему, способную проанализировать поведение клиентов и предложить пользователям новый тариф: «Смарт» или «Ультра». 4 | 5 | В нашем распоряжении данные о поведении клиентов, которые уже перешли на эти тарифы. Нужно построить модель для задачи классификации, которая выберет подходящий тариф. 6 | 7 | Необходимо построить модель с максимально большим значением метрики *accuracy*. 8 | 9 | # Выводы 10 | 11 | Целью данного проекта была разработка модели, позволяющей рекомендовать тариф _smart_ или _ultra_ для пользователей старых тарифов. 12 | 13 | Для этого использовались данные о клиентах, уже подключенных к тарифам _smart_ и _ultra_. Данные были разделены на обучающую и тестовую выборки. 14 | 15 | Мы провели серию экспериментов с различными моделями и различными наборами гипер-параметров. Все модели сравнивались между собой по метрике _accuracy_ на кросс-валидации. Анализ показал, что для имеющегося набора данных наилучший результат показывает модель случайного леса из 120 деревьев глубиной 13. 16 | 17 | Выбранная модель была проверена на тестовых данных, при этом метрика _accuracy_ составила 0,812, что в рамках данной задачи можно считать весьма хорошим результатом. 18 | 19 | Данная модель позволит отбирать пользователей, которые готовы перейти на более выгодный для компании тариф и разрабатывать для них таргетированную рекламу, что может существенно снизить расходы бизнеса. 20 | -------------------------------------------------------------------------------- /ML_p7_bank_churn/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Из «Бета-Банка» стали уходить клиенты. Каждый месяц. Немного, но заметно. Банковские маркетологи посчитали: сохранять текущих клиентов дешевле, чем привлекать новых. 4 | 5 | Нужно спрогнозировать, уйдёт клиент из банка в ближайшее время или нет. Нам предоставлены исторические данные о поведении клиентов и расторжении договоров с банком. 6 | 7 | Построим модель с предельно большим значением *F1*-меры. Успешными будем считать решения с метрикой от 0,59 на валидации. 8 | 9 | Дополнительно измерим метрику *AUC-ROC*, сравним её значение с *F1*-мерой. 10 | 11 | # Выводы 12 | 13 | Задачей данного проекта было прогнозирование оттока клиентов банка на основе имеющихся данных. 14 | 15 | Был проведён исследовательский анализ данных, позволивший выявить ряд несущественных проблем с данными и одну колонку с возможно ошибочными данными. 16 | 17 | Затем были созданы четыре модели, которые последовательно обучались с различными наборами данных, созданными на основе исходной таблицы. Оценка эффективности моделей производилась по метрикам _F1_ и _ROC AUC_. 18 | 19 | В результате было установлено, что наилучшего значения метрики удаётся достичь для отмасштабированного и сбалансированного набора данных, из которого была исключена колонка с потенциально некорректными данными. Итоговая метрика _F1_ наилучшей модели на тестовых данных равна 0,6. 20 | 21 | Ценность прогнозов моделей была показана путём сравнения с «глупым» классификатором, который на всех данных выдавал прогноз, что клиент останется в банке. 22 | 23 | Полученные модели могут применяться при разработке маркетинговых стратегий, при изучении клиентской базы, чтобы целенаправлено работать с клиентами, которые могут уйти из банка. 24 | -------------------------------------------------------------------------------- /ML_p8_oil_rigs/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Допустим, мы работаем в добывающей компании «ГлавРосГосНефть». Нужно решить, где бурить новую скважину. 4 | 5 | Нам предоставлены пробы нефти в трёх регионах: в каждом 10 000 месторождений, где измерили качество нефти и объём её запасов. Построим модель машинного обучения, которая поможет определить регион, где добыча принесёт наибольшую прибыль. Проанализируем возможную прибыль и риски техникой *Bootstrap.* 6 | 7 | # Выводы 8 | 9 | В рамках данного проекта методы машинного обучения были применены для получения рекомендаций по выбору перспективного региона для разработки новых месторождений. 10 | 11 | Выбор производился из трёх регионов. Для каждого региона были созданы и обучены модели, предсказывающие объём запасов по признакам $f_0$, $f_1$, $f_2$. Для регионов 0, 1, 2 были получены предсказания моделей для тестовых выборок. Средние предсказанные запасы сырья по регионам и корни среднеквадратичных ошибок (RMSE) представлены в таблице ниже: 12 | 13 | | Регион | Среднее предсказанных запасов | RMSE | 14 | |:--------------:|:-----------:|:--:| 15 | | 0 | 92.5 | 37.7 | 16 | | 1 | 68.3 | 0.9 | 17 | | 2 | 94.9 | 40.2 | 18 | 19 | Для региона 1 метрика RMSE довольно низка, что ожидаемо, если принять во внимание обнаруженную ранее сильную корреляцию переменных product и $f_2$. 20 | 21 | Был расчитан пороговый уровень объёма запасов в одной скважине, при котором разработка этой скважины становится экономически оправданной (прибыль покрывает все затраты на разработку). При этом было показано, что средние предсказанные объёмы запасов в регионах 0, 1, 2 меньше, чем рассчитанное пороговое значение. А следовательно, чтобы разработка новых скважин была экономически эффективна, необходимо тщательно отбирать кандидатов для разработки. 22 | 23 | Мы также применили методику *Bootstrap* для прогнозирования прибыльности разработки месторождений в регионах 0, 1 и 2. Полученные выборки в соответствии с центральной предельной теоремой стремятся к нормальному распределению. В результате были получены следующее оценки средней прибыли и вероятности получения убытка при разработке 200 новых месторождений в регионе: 24 | 25 | | Регион | Прогноз средней прибыли | Прогноз вероятности убытка| 26 | |:--------------:|:-----------:|:------------:| 27 | | 0 | 0.41 млрд. руб. | 7.4 % | 28 | | 1 | 0.44 млрд. руб. | 2.2 % | 29 | | 2 | 0.38 млрд. руб. | 7.8 % | 30 | 31 | Видно, что в регионе 1 прогноз средней прибыли выше, а прогноз вероятности получения убытка меньше. Исходя из этого можно рекомендовать регион 1 для разработки новых месторождений. Однако следует помнить, что на этапе исследовательского анализа данных мы обнаружили возможную «протечку» данных, что могло исказить разработанную модель, а также оценки прибыли и убытка. 32 | 33 | На основе полученных данных рекомендуется выбрать для разработки новых месторождений регион 1, так как в нём вероятность получения убытка ниже, чем в регионах 0 и 2, а прогноз средней прибыли — выше. 34 | -------------------------------------------------------------------------------- /ML_p9_gold/README.md: -------------------------------------------------------------------------------- 1 | # Задача 2 | 3 | Здача данного проекта — подготовить прототип модели машинного обучения для компании «Цифра». Компания разрабатывает решения для эффективной работы промышленных предприятий. 4 | 5 | Модель должна предсказать коэффициент восстановления золота из золотосодержащей руды. Используются данные с параметрами добычи и очистки. 6 | 7 | Модель поможет оптимизировать производство, чтобы не запускать предприятие с убыточными характеристиками. 8 | 9 | # Выводы 10 | 11 | Были получены данные по процессу восстановления золота из руды. В ходе предварительного анализа в данных были выявлены и исправлены незначительные проблемы. 12 | 13 | Была проверена правильность расчёта в обучающей выборке эффективности обогащения золота после флотации. 14 | 15 | Был проведён анализ полученных данных для выявления общих закономерностей технологического процесса и проверки готовности данных для моделирования. Нами установлено, что 16 | 17 | * концентрация золота на каждом последующем этапе обработки увеличивается 18 | * концентрация серебра увеличивается после флотации, но уменьшается после первичной и вторичной очистки 19 | * концентрация свинца увеличивается вплоть до вторичной очистки, вторичная очистка практически не влияет на концентрацию свинца 20 | * распределения размеров гранул сырья в обучающей и тестовой выборках не имеют существенных отличий 21 | * суммарная концентрация серебра, свинца и золота на протяжении всего технологического процесса понижается. 22 | 23 | Наконец, были обучены пять моделей, предсказывающих значения целевых параметров. Для моделей были подобраны гипер-параметры, обеспечивающие наилучшие значения метрики на кросс-валидации. Затем для каждой модели была расчитана метрика _sMAPE_ на тестовых данных. 24 | 25 | | Модель | Значение sMAPE | 26 | | ----------- | ----------- | 27 | | Случайный лес | 8.26 | 28 | | $k$-ближайших соседей | 7.40 | 29 | | Линейная регрессия | 7.70 | 30 | | Лассо | 6.37 | 31 | | CatBoost | 7.02 | 32 | 33 | Наилучшее значение метрики удалось получить для линейной модели Лассо, которую рекомендуется применять на производстве. 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Artificial_Neural_Network_with_Chip.png/640px-Artificial_Neural_Network_with_Chip.png 'mikemacmarketing, Liam Huang') 2 | 3 | # Обо мне 4 | 5 | Привет. Меня зовут Михаил Васильев. Я — Data Scientist. Здесь вы можете ознакомится с некоторыми моими учебными проектами. 6 | 7 | Большой опыт применения моделей глубокого обучения для решения задач CV и NLP. Также обучал классические ML-модели для задач anomaly detection в различных контекстах. 8 | 9 | Закончил [Яндекс Практикум](https://practicum.yandex.ru/) и [Deep learning school ФПМИ МФТИ](https://dls.samcs.ru/). 10 | 11 | Мне нравится работать с данными, читать научные статьи, экспериментировать, пробовать различные подходы в обучении ML-моделей, строить графики. 12 | 13 | Въедливый, умею замечать небольшие логические ошибки, обожаю интеллектуальные игры, с удовольствием изучаю иностранные языки. 14 | 15 | Контакты: 16 | 17 | * Почта: [gnu.xinm@gmail.com](mailto:gnu.xinm@gmail.com) 18 | * Telegram: [@LaHundo](https://t.me/LaHundo) 19 | 20 | Используемые технологии: python, transformers, EfficientNet, MobileNet, YOLO, PyOD, pandas, sklearn, pytorch, lightning, numpy, matplotlib, plotly, huggingface, onnx, fastapi, uvicorn, pyinstaller, pywin32, optimum, airflow, mlflow, cvat, natasha, deeppavlov, BERT, whisper, Ollama 21 | 22 | Профессиональный опыт: 23 | 24 | * 2023—н.в. [Маквес](https://makves.ru/), старший специалист по машинному обучению 25 | * 2012—2023 ОКБ Сухого, ведущий инженер 3 класса 26 | 27 | Проект: создание комплексного решения для обеспечения безопасности в корпоративной сети на основе неструктурированных данных 28 | 29 | Задачи: 30 | 31 | * создал ансамбль алгоритмов для поиска аномалий на табличных данных, в том числе на временных рядах 32 | * реализовал нейросетевой модуль для поиска нарушений закона о персональных данных, количество детектируемых классов увеличено с 14 до 36, accuracy top 1 увеличена до 98.9 33 | * подготовил модуль для анализа содержимого отсканированных документов: поиск текста, таблиц, печатей, подписей и корпоративных бланков, количество классов увеличено с 5 до 19, повысил метрику mAP@.5 с .89 до .94 34 | * реализовал поиск чувствительных данных в текстовых файлах, добавил модуль NER 35 | * реализовал поиск чувствительных данных в аудио-файлах 36 | * организовал сбор и разметку 8 датасетов для задач классификации и object detection 37 | 38 | # Выступления 39 | 40 | | Мероприятие | Тема | 41 | | :-----------| :----------- | 42 | | [Moscow Python Meetup 91 (2024)](https://moscowpython.ru/meetup/91/) | [Опыт обучения и применения нейросетей в качестве модуля российской DCAP-системы](presentations/moscow_python_meetup_91) | 43 | 44 | # Статьи 45 | * [Хабр: Опыт реализации нейросетевого модуля российской DCAP-системы](https://habr.com/ru/companies/garda/articles/851768/) 46 | 47 | # Подкасты со мной 48 | 49 | | Подкаст | Тема | 50 | | :-----------| :----------- | 51 | | [Deep Learning Stories](https://podcasts.apple.com/us/podcast/deep-learning-stories/id1585678829) | [ Как войти в айти и создать коммьюнити](https://www.youtube.com/watch?v=zoVm2C_hkss) [(VK-видео)](https://vk.com/video/@dlschool_mipt/uploaded?z=video-155161349_456239191%2Fclub155161349) [(Apple Podcasts)](https://podcasts.apple.com/ru/podcast/%D0%BA%D0%B0%D0%BA-%D0%B2%D0%BE%D0%B9%D1%82%D0%B8-%D0%B2-it-%D0%B8-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D0%BA%D0%BE%D0%BC%D0%BC%D1%8C%D1%8E%D0%BD%D0%B8%D1%82%D0%B8-%D1%81-%D1%81-%D0%BC%D0%B8%D1%85%D0%B0%D0%B8%D0%BB%D0%BE%D0%BC-%D0%B2%D0%B0%D1%81%D0%B8%D0%BB%D1%8C%D0%B5%D0%B2%D1%8B%D0%BC/id1585678829?i=1000672383083) | 52 | 53 | # Pet-проекты 54 | 55 | | Репозиторий | Описание | 56 | | :-----------| :----------- | 57 | | [Телеграм-бот с ИИ модулем для контроля качества оформления документов](https://github.com/vivat-7on/TGaktBot) | [Телеграм-бот помогает пользователям проверить корректность и полноту оформления Актов проверки работоспособности системы автоматической пожарной сигнализации (АПС).](presentations/check_doc_ai)| 58 | 59 | # Хакатоны 60 | 61 | * [Цифровой прорыв x RuTube](presentations/rutube_hack) 62 | * [VK x HSE Data Hack (1 место)](presentations/vk_hse_hack) 63 | * [«Росэлторг» — RLT.Hack](https://github.com/onixlas/DS_portfolio/tree/main/certificates/RLT-hack.pdf) 64 | * [«Росэлторг» — zakupkiHack 2.0](https://github.com/onixlas/DS_portfolio/tree/main/certificates/zakupki-hack.pdf) 65 | 66 | # Kaggle 67 | 68 | * [ML for Big Derby (коллективный проект)](https://www.kaggle.com/code/leowhynot/ml-for-big-derby) 69 | 70 | # Дипломы и сертификаты 71 | 72 | - [ФПМИ МФТИ - Диплом 1-ой степени](https://github.com/onixlas/DS_portfolio/tree/main/certificates/diploma_rus.pdf) ([en](https://github.com/onixlas/DS_portfolio/tree/main/certificates/diploma_eng.pdf)) 73 | - [Yandex - Специалист по Data Science](https://github.com/onixlas/DS_portfolio/tree/main/certificates/yandex-ru.pdf) ([en](https://github.com/onixlas/DS_portfolio/tree/main/certificates/yandex-en.pdf)) 74 | - [Повышение квалификации: Введение в искусственный интеллект и нейросети для авиационных приложений](https://github.com/onixlas/DS_portfolio/tree/main/certificates/sert-ai.pdf) 75 | - [Повышение квалификации: Анализ данных на языке SQL](https://github.com/onixlas/DS_portfolio/tree/main/certificates/certificate_SQL.png) 76 | - [Программа обучения «Резерв-3»](https://github.com/onixlas/DS_portfolio/tree/main/certificates/rezerv-3.pdf) 77 | - [Поколение Python. Курс для продвинутых](https://stepik.org/cert/1460043) 78 | - [Поколение Python. Курс для профессионалов](https://stepik.org/cert/2511973) 79 | - [Добрый, добрый Python ООП](https://stepik.org/cert/2071046) 80 | - [Основы статистики](https://stepik.org/cert/1535940) 81 | - [Введение в Data Science и машинное обучение](https://stepik.org/cert/1479747) 82 | - [Data Science с Глебом Михайловым](https://stepik.org/cert/1673640) 83 | - [SQL для Анализа Данных с Глебом Михайловым](https://stepik.org/cert/1753578) 84 | - [Асинхронный Python](https://stepik.org/cert/2585570) 85 | - [Intro to Machine Learning](https://www.kaggle.com/learn/certification/salutonkielvifartas/intro-to-machine-learning) 86 | - [Intermediate Machine Learning](https://www.kaggle.com/learn/certification/salutonkielvifartas/intermediate-machine-learning) 87 | - [Data Visualization](https://www.kaggle.com/learn/certification/salutonkielvifartas/data-visualization) 88 | - [Feature Engineering](https://www.kaggle.com/learn/certification/salutonkielvifartas/feature-engineering) 89 | - [НИУ ВШЭ - MLOps Bootcamp](https://github.com/onixlas/DS_portfolio/tree/main/certificates/hse_mlops.png) 90 | - [Young && Yandex - Тренировки по ML](https://github.com/onixlas/DS_portfolio/tree/main/certificates/yandex_ML.pdf) 91 | 92 | 93 | # Проекты Школы глубокого обучения МФТИ 94 | 95 | ## NLP и обработка аудио 96 | 97 | | Проект | Задачи проекта | 98 | | :-----------| :----------- | 99 | | [6. Языковое моделирование ](https://github.com/onixlas/DS_portfolio/blob/main/DLS_p6_language_modeling/dls_p6_language_modeling.ipynb) | В данном проекте мы будем заниматься языковым моделированием. Обучим несколько нейросетевых моделей предсказывать слова на основе предыдущего текста. Такие модели можно использовать и для генерации новых текстов, что мы также продемонстрируем. | 100 | | [5. Классификация текстов ](https://github.com/onixlas/DS_portfolio/blob/main/DLS_p5_text_classification/dls_p5_text_classification.ipynb) | На этот раз нам предстоит решить задачу классификации текстов. Мы будем использовать набор данных [`ag_news`](https://paperswithcode.com/dataset/ag-news). Это датасет для классификации новостей на 4 темы: *World, Sports, Business, Sci/Tech.* Посмотрим, как с такой задачей справятся рекуррентные нейросети. | 101 | 102 | ## Computer Vision 103 | 104 | ### Дипломный проект 105 | 106 | | Проект | Задачи проекта | 107 | | :-----------| :----------- | 108 | | [Распознавание лиц](https://github.com/onixlas/DS_portfolio/tree/main/DLS_cv_diploma_project/DLS_cv_diploma_project.ipynb) | В этом проекте мы будем решать задачу распознавания лиц. Мы обучим нейросеть и поиграем с различными функциями потерь и метриками. Обучение будем производить на наборе данных [CelebA dataset](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html). | 109 | 110 | ### Учебные проекты 111 | 112 | | Проект | Задачи проекта | 113 | | :-----------| :----------- | 114 | | [4. GAN ](https://github.com/onixlas/DS_portfolio/blob/main/DLS_p4_gan/dls_p4_gan.ipynb) | Мы обучим нейросеть генерировать лица людей и посмотрим на то, как можно оценивать качество генерации. В качестве обучающей выборки возьмём датасет [Flickr-Faces](https://github.com/NVlabs/ffhq-dataset). | 115 | | [3. Автокодировщики ](https://github.com/onixlas/DS_portfolio/blob/main/DLS_p3_autoencoders/dls_p3_autoencoders.ipynb) | В данном проекте наша задача — написать и обучить несколько вариантов автокодировщиков, оценить их свойства и применимость для различных задач. Для этого мы будем использовать датасеты лиц [*(LFW)*](https://vis-www.cs.umass.edu/lfw/) и цифр *(MNIST)*. Во всех случаях мы будем применять достаточно простые свёрточные архитектуры и латентные вектора малых размеров, чтобы полученные результаты были более наглядными. | 116 | | [2. Семантическая сегментация ](https://github.com/onixlas/DS_portfolio/blob/main/DLS_p2_semantic_segmentation/dls_p2_semantic_segmentation.ipynb) | Мы будем решить задачу сегментации медицинских снимков. В нашем распоряжении датасет [*ADDI project*](https://www.fc.up.pt/addi/ph2%20database.html). В нём содержатся фотографии различных поражений кожи: меланомы и родинок. Однако мы будем заниматься не классификацией, а сегментацией изображений, т.е. разделением изображений на несколько сегментов для упрощения последующего анализа и обработки. Проще говоря, нам необходимо обучить модель, которая сможет для каждого пикселя исходного изображения определить: изображена на нём родинка, либо просто участок кожи. | 117 | | [1. Классификация изображений ](https://github.com/onixlas/DS_portfolio/blob/main/DLS_p1_simpsons/dls_p1_simpsons.ipynb) | Сегодня нам предстоить помочь телекомпании *FOX* в обработке их контента. Как известно, сериал «Симпсоны» идет на телеэкранах более 25 лет, и за это время скопилось очень много видеоматериала. Персоонажи менялись вместе с изменяющимися графическими технологиями, и Гомер Симпсон-2023 не очень похож на Гомера Симпсона-1989. В этом задании нам необходимо классифицировать персонажей, проживающих в Спрингфилде. | 118 | 119 | # Проекты Яндекс-Практикума 120 | 121 | ## Дипломный проект 122 | 123 | | Проект | Задачи проекта | 124 | | :-----------| :----------- | 125 | | [Промышленная обработка стали](https://github.com/onixlas/DS_portfolio/tree/main/ML_diploma_project/diploma-project.ipynb) | Чтобы оптимизировать производственные расходы, металлургический комбинат ООО «Так закаляем сталь» решил уменьшить потребление электроэнергии на этапе обработки стали. Нам предстоит построить модель, которая предскажет температуру стали. | 126 | 127 | ## Портфолио ML- и DL-проектов 128 | 129 | | Проект | Задачи проекта | 130 | | :-----------| :----------- | 131 | | [9. Определение возраста по фотографиям](https://github.com/onixlas/DS_portfolio/tree/main/ML_p14_cv/resnet50.ipynb) | Сетевой супермаркет «Хлеб-Соль» внедряет систему компьютерного зрения для обработки фотографий покупателей. Необходимо построить модель, которая по фотографии определит приблизительный возраст человека. В нашем распоряжении набор фотографий людей с указанием возраста. | 132 | | [8. Обучение модели классификации комментариев](https://github.com/onixlas/DS_portfolio/tree/main/ML_p13_texts/bert.ipynb) | Интернет-магазин запускает новый сервис. Теперь пользователи могут редактировать и дополнять описания товаров, как в вики-сообществах. То есть клиенты предлагают свои правки и комментируют изменения других. Требуется инструмент, который будет искать токсичные комментарии и отправлять их на модерацию. | 133 | | [7. Прогнозирование количества заказов такси на следующий час](https://github.com/onixlas/DS_portfolio/tree/main/ML_p12_time_series/taxi.ipynb) | Компания такси собрала исторические данные о заказах такси в аэропортах. Чтобы привлекать больше водителей в период пиковой нагрузки, нужно спрогнозировать количество заказов такси на следующий час. Строится модель для такого предсказания. | 134 | | [6. Построение модели определения стоимости автомобиля](https://github.com/onixlas/DS_portfolio/tree/main/ML_p11_car_prices/cars_prices.ipynb) | Сервис по продаже автомобилей с пробегом разрабатывает приложение для привлечения новых клиентов. В нём можно быстро узнать рыночную стоимость своего автомобиля. На основе исторические данные необходимо построить модель для определения стоимости автомобиля. | 135 | | [5. Защита данных клиентов страховой компании](https://github.com/onixlas/DS_portfolio/tree/main/ML_p10_insurance/insurance.ipynb) | Необходимо защитить данные клиентов страховой компании «Хоть потоп». Разработаем такой метод преобразования данных, чтобы по ним было сложно восстановить персональную информацию. Обоснуем корректность его работы. Нужно защитить данные, чтобы при преобразовании качество моделей машинного обучения не ухудшилось. Подбирать наилучшую модель не требуется. | 136 | | [4. Исследование технологического процесса очистки золота](https://github.com/onixlas/DS_portfolio/tree/main/ML_p9_gold/gold_rush.ipynb) | Строится модель машинного обучения для промышленной компании, разрабатывающая решения для эффективной работы промышленных предприятий. Модель должна предсказать коэффициент восстановления золота из золотосодержащей руды на основе данных с параметрами добычи и очистки. Модель поможет оптимизировать производство, чтобы не запускать предприятие с убыточными характеристиками. | 137 | | [3. Определение наиболее выгодного региона нефтедобычи](https://github.com/onixlas/DS_portfolio/tree/main/ML_p8_oil_rigs/oil_rigs.ipynb) | Нам предоставлены пробы нефти в трёх регионах. Характеристики для каждой скважины в регионе уже известны. Необходимо построить модель для определения региона, где добыча принесёт наибольшую прибыль. | 138 | | [2. Прогнозирование оттока клиента банка](https://github.com/onixlas/DS_portfolio/tree/main/ML_p7_bank_churn/bank_customers.ipynb) | Из банка стали уходить клиенты. Каждый месяц. Немного, но заметно. Банковские маркетологи посчитали: сохранять текущих клиентов дешевле, чем привлекать новых. Нужно спрогнозировать, уйдёт клиент из банка в ближайшее время или нет. Предоставлены исторические данные о поведении клиентов и расторжении договоров с банком. | 139 | | [1. Классификаиция клиентов телеком компании](https://github.com/onixlas/DS_portfolio/tree/main/ML_p6_telecom/telecom.ipynb) | Оператор мобильной связи выяснил: многие клиенты пользуются архивными тарифами. Они хотят построить систему, способную проанализировать поведение клиентов и предложить пользователям один из новых тарифов. | 140 | 141 | ## Портфолио DA-проектов 142 | 143 | | Проект | Задачи проекта | 144 | | :-----------| :----------- | 145 | | [5. Выявление закономерностей, влияющих на успешность игр](https://github.com/onixlas/DS_portfolio/tree/main/ML_p5_games/games.ipynb) | Используя файл с историческими данными о продажах игр, оценках пользователей и экспертов, жанрами и платформами (например, Xbox или PlayStation) выявить определяющие успешность игры закономерности | 146 | | [4. Определение выгодного тарифа для телеком компании](https://github.com/onixlas/DS_portfolio/tree/main/ML_p4_stat_analysis/stat_analysis.ipynb) | На основе данных клиентов оператора сотовой связи проанализировать поведение клиентов и поиск оптимального тарифа | 147 | | [3. Продажа квартир в Санкт-Петербурге — анализ рынка недвижимости](https://github.com/onixlas/DS_portfolio/tree/main/ML_p3_real_estate/real_estate.ipynb) | Используя данные сервиса Яндекс.Недвижимость, определить рыночную стоимость объектов недвижимости и типичные параметры квартир | 148 | | [2. Исследование надёжности заёмщиков — анализ банковских данных](https://github.com/onixlas/DS_portfolio/tree/main/ML_p2_data_preprocessing/data_preprocessing.ipynb) | На основе статистики о платёжеспособности клиентов исследовать влияет ли семейное положение и количество детей клиента на факт возврата кредита в срок | 149 | | [1. Исследование данных сервиса “Яндекс.Музыка” — сравнение пользователей двух городов](https://github.com/onixlas/DS_portfolio/tree/main/ML_p1_yandex_music/yandex_music.ipynb) | На реальных данных Яндекс.Музыки c помощью библиотеки Pandas и её возможностей проверить данные и сравнить поведение и предпочтения пользователей двух столиц — Москвы и Санкт-Петербурга | 150 | 151 | 152 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | title: Михаил Васильев 2 | description: [Портфолио Data Science проектов] 3 | author: Михаил Васильев 4 | lang: ru-RU 5 | remote_theme: pages-themes/midnight@v0.2.0 6 | plugins: 7 | - jekyll-remote-theme 8 | -------------------------------------------------------------------------------- /certificates/RLT-hack.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/RLT-hack.pdf -------------------------------------------------------------------------------- /certificates/certificate_SQL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/certificate_SQL.png -------------------------------------------------------------------------------- /certificates/diploma_eng.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/diploma_eng.pdf -------------------------------------------------------------------------------- /certificates/diploma_rus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/diploma_rus.pdf -------------------------------------------------------------------------------- /certificates/hse_mlops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/hse_mlops.png -------------------------------------------------------------------------------- /certificates/rezerv-3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/rezerv-3.pdf -------------------------------------------------------------------------------- /certificates/rutube_hack.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/rutube_hack.pdf -------------------------------------------------------------------------------- /certificates/sert-ai.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/sert-ai.pdf -------------------------------------------------------------------------------- /certificates/vk_hse_hack.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/vk_hse_hack.pdf -------------------------------------------------------------------------------- /certificates/yandex-en.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/yandex-en.pdf -------------------------------------------------------------------------------- /certificates/yandex-ru.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/yandex-ru.pdf -------------------------------------------------------------------------------- /certificates/yandex_ML.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/yandex_ML.pdf -------------------------------------------------------------------------------- /certificates/zakupki-hack.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/certificates/zakupki-hack.pdf -------------------------------------------------------------------------------- /images/jusuhinina.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/images/jusuhinina.jpg -------------------------------------------------------------------------------- /images/mvasiljev.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/images/mvasiljev.jpg -------------------------------------------------------------------------------- /images/oivanova.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/images/oivanova.jpg -------------------------------------------------------------------------------- /images/vsemionov.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/images/vsemionov.jpg -------------------------------------------------------------------------------- /presentations/check_doc_ai/README.md: -------------------------------------------------------------------------------- 1 | # Проект CheckDocAI 2 | 3 | ## Задача 4 | 5 | Создать сервис, обеспечивающий проверку корректности и полноты оформления Актов проверки работоспособности системы автоматической пожарной сигнализации. Сервис должен принимать PDF-файл с отсканированными актами и возвращать информацию о найденных дефектах. Критерий проверки: на каждом акте должны быть две печати и две подписи. 6 | 7 | ## Команда проекта 8 | 9 | ### Михаил Васильев 10 | 11 | ![Михаил Васильев](../../images/mvasiljev.jpg 'Михаил Васильев') 12 | 13 | * старший специалист по машинному обучению, [Маквес](https://makves.ru/) 14 | * Telegram: [@LaHundo](https://t.me/LaHundo) 15 | * тим-лид и технический эксперт 16 | 17 | ### Ольга Иванова 18 | 19 | ![Ольга Иванова](../../images/oivanova.jpg 'Ольга Иванова') 20 | 21 | * инженер, [МГУ им. М.В. Ломоносова](https://msu.ru/) 22 | * Telegram: [@oakarabut](https://t.me/oakarabut) 23 | * разметка данных, аугментации 24 | 25 | ### Юлия Сухинина 26 | 27 | ![Юлия Сухинина](../../images/jusuhinina.jpg 'Юлия Сухинина') 28 | 29 | * руководитель по развитию, [АО «Гольфстрим охранные системы»](https://gulfstream.ru/) 30 | * Telegram: [@Sukhinina_Julia](https://t.me/Sukhinina_Julia) 31 | * разметка данных, аугментации, обучение модели 32 | 33 | ### Валерий Семёнов 34 | 35 | ![Валерий Семёнов](../../images/vsemionov.jpg 'Валерий Семёнов') 36 | 37 | * преподаватель 38 | * Telegram: [@vivat7on](https://t.me/vivat7on) 39 | * бекенд, DevOps 40 | 41 | ## Технологии 42 | 43 | yolo, albumentations, aiogram, cvat 44 | 45 | ## Решение 46 | 47 | Собрали собственный датасет с отсканированными Актами проверки. Произвели разметку датасета с использованием сервиса CVAT. Для каждого акта мы размечали проставленные печати, подписи, даты, а также номер акта. Произвели аугментацию датасета с использованием библиотеки albumentations. Обучили нейросеть YOLO v8. 48 | 49 | Для взаимодействия с пользователем реализовали телеграм-бота, принимающего на вход PDF-файл с отсканированными актами и возвращающего результаты проверки. 50 | 51 | Решение развёрнуто и успешно используется АО «Гольфстрим охранные системы». 52 | 53 | [(репозиторий)](https://github.com/vivat-7on/TGaktBot) [(презентация)](./check_doc_ai.pdf) -------------------------------------------------------------------------------- /presentations/check_doc_ai/check_doc_ai.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/check_doc_ai/check_doc_ai.pdf -------------------------------------------------------------------------------- /presentations/moscow_python_meetup_101/iForest PCA.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/moscow_python_meetup_101/iForest PCA.pdf -------------------------------------------------------------------------------- /presentations/moscow_python_meetup_91/README.md: -------------------------------------------------------------------------------- 1 | # Опыт обучения и применения нейросетей в качестве модуля российской DCAP-системы 2 | 3 | Выступление на [Moscow Python Meetup 91](https://moscowpython.ru/meetup/91/) (2024 год). В докладе я поделился опытом своей работы в компании [Makves](https://makves.ru/), а также рассказал о применении задач компьютерного зрения для обеспечения корпоративной безопасности. 4 | 5 | ## Видео на YouTube 6 | [![Видео выступления](https://img.youtube.com/vi/VMDWjJoT8yE/0.jpg)](https://www.youtube.com/watch?v=VMDWjJoT8yE) 7 | 8 | [(презентация)](https://github.com/onixlas/DS_portfolio/tree/main/presentations/moscow_python_meetup_91/python_dcap.pdf) -------------------------------------------------------------------------------- /presentations/moscow_python_meetup_91/python_dcap.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/moscow_python_meetup_91/python_dcap.pdf -------------------------------------------------------------------------------- /presentations/moscow_python_meetup_98/python_dcap_nlp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/moscow_python_meetup_98/python_dcap_nlp.pdf -------------------------------------------------------------------------------- /presentations/moscow_python_meetup_99/HBOS_ECOD.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/moscow_python_meetup_99/HBOS_ECOD.pdf -------------------------------------------------------------------------------- /presentations/phdays_fest_2025/michael_vasiljev_phd_anomaly.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/phdays_fest_2025/michael_vasiljev_phd_anomaly.pdf -------------------------------------------------------------------------------- /presentations/rutube_hack/README.md: -------------------------------------------------------------------------------- 1 | # Интеллектуальный помощник оператора службы поддержки 2 | 3 | ## Задача 4 | 5 | Разработать RAG-систему для автоматизации работы технической поддержки RuTube 6 | 7 | ## Решение 8 | 9 | Расширили датасет синтетическими данными, созданными `GPT-4o`. Обучили на полученных данных две модели-классификатора. Также произвели файн-тюнинг модели-эмбеддера. Развернули RAG-систему на базе модели `Mistral-Nemo`. Развернули REST API и телеграм-бота для получения результатов генерации. 10 | 11 | ## Моя роль 12 | 13 | * обучение моделей-классификаторов 14 | * файн-тюнинг модели-эмбеддера 15 | * создание REST API 16 | * презентация результатов 17 | 18 | [(презентация)](https://github.com/onixlas/DS_portfolio/blob/main/presentations/rutube_hack/RuTube_Support_AI.pdf) [(сертификат)](https://github.com/onixlas/DS_portfolio/blob/main/certificates/rutube_hack.pdf) [(репозиторий)](https://github.com/snakerzr/rutube_hackathon) -------------------------------------------------------------------------------- /presentations/rutube_hack/RuTube_Support_AI.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/rutube_hack/RuTube_Support_AI.pdf -------------------------------------------------------------------------------- /presentations/vk_hse_hack/README.md: -------------------------------------------------------------------------------- 1 | # Классификация новостных текстов с присвоением тегов 2 | 3 | ## Задача 4 | 5 | Разработать сервис для автоматической классификации новостей на 21 класс. 6 | 7 | ## Решение 8 | 9 | Обогатили датасет, добавив 56 000 новостных статей агентства «Интерфакс». Подготовили псевдо-разметку с использованием zero-shot классификации, обучили небольшую модель. Также использовали LLM `Saiga3 8b` для оценки соответствия статей каждому из 21 тегов. На основе обоих подходов развернули сервис с REST API для классификации текстов. 10 | 11 | ## Моя роль 12 | 13 | * обогащение датасета 14 | * эксперименты с zero-shot classification моделями 15 | * обучение модели-классификатора 16 | * создание REST API 17 | * координация работы команды 18 | * презентация результатов 19 | 20 | [(презентация)](https://github.com/onixlas/DS_portfolio/blob/main/presentations/vk_hse_hack/news_classification.pdf) [(диплом победителя)](https://github.com/onixlas/DS_portfolio/blob/main/certificates/vk_hse_hack.pdf) [(репозиторий)](https://github.com/snakerzr/vk_llm_hackathon) -------------------------------------------------------------------------------- /presentations/vk_hse_hack/news_classification.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onixlas/DS_portfolio/e00bf4d82fa07a9fba971d6509e7fca435a21bb9/presentations/vk_hse_hack/news_classification.pdf --------------------------------------------------------------------------------