Цифровой прорыв 2022. Задача «Радар тенденций новостных статей»
Александр Широков
t.me/aptmess
Цель модели участников — предсказать 3 численные характеристики, которые в полной мере показывают популярность статьи:
views- количество просмотровfull_reads_percent- процент читателей полностью прочитавших статьюdepth- объем прочитанного материала
Для оценки качества решения используется метрика R2:
result = 0.4 * R2_views + 0.3 * R2_full_reads_percent + 0.3 * R2_depth
Итоговое решение состоит из следующих этапов:
-
Парсинг дополнительных данных с сайта РБК на страницах новостей, используя
document_id:make parse_news_train- парсинг дляtrainдатасета:./data/parsed/train_parsed.jsonmask parse_news_test- парсинг дляtestдатасета:./data/parsed/test_parsed.jsonБыли собраны дополнительные признаки такие как текст новости, имена и информация об авторах и тэгах, информация о длине текста, наличии изображения в статье итд. Данные о просмотрах или какие-то статистические данные не были использованы. Все данные парсятся автоматически с помощью скрипта выше.
-
Data Preprocessing- используется модульsrc.transformers.preprocessдля препроцессинга данных./data/full/full_train.json- тренировочные данные после процессинга./data/full/full_test.json- тестовые данные после процессинга
import pandas as pd
from src.transformers.base import Compose
from src.transformers.preprocess import (
LoaderMergePreprocess,
CategoryFromTextPreprocess,
AuthorsPreprocess,
TagsPreprocess,
FeaturePreprocess,
SaverPreprocess,
NatashaTransformer
)
Preprocessor = Compose(
transforms=[
LoaderMergePreprocess(name='loading'),
CategoryFromTextPreprocess(name='category from text'),
AuthorsPreprocess(name='authors preprocess'),
TagsPreprocess(name='tags preprocess'),
FeaturePreprocess(name='feature selector'),
NatashaTransformer(name='natasha name entity'),
SaverPreprocess(name='saving files')
]
)
train = Preprocessor(data=pd.DataFrame(), mode='train')
test = Preprocessor(data=pd.DataFrame(), mode='test')-
Feature Generation- генерация признаков. ИспользуютсяTFIDF-признаки дляtitle, authors и tags, признаки из времени и собранные признаки при парсинге. -
Fit Models- валидация по трем фолдам, преобразование таргета путем логирования, использованиеLightGBMрегрессора и усреднение значения для предсказанияviews: 70.8+-0.3depth: 83.9+-0.3full_reads_percent: 55.1+-0.4
-
Sub- предсказание + отдельно предсказания для данных, которые есть и вtrainи вtest
- Создать виртуальное окружение в
PyCharmв папке.venv - Запустить команду
make venv - Установка
Jupyter kernel:python -m ipykernel install --name rbk --user
Необходимо запустить notebook ./notebook/full_pipeline.ipynb.
Лучшее решение получилось здесь: ./notebooks/step-2.ipynb
public result = 0.7619