AI-парсинг SEC EDGAR: вилучення метрик з 10-K, 10-Q, 8-K

Парсинг SEC EDGAR: від сирого HTML до структурованих даних

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1302
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

Парсинг SEC EDGAR: від сирого HTML до структурованих даних

Ручний розбір 10-K на 400 сторінок займає в аналітика півдня. Помилки при вилученні Revenue з таблиць — кожен п'ятий запис. Ми побудували систему, яка за 5 хвилин витягує всі ключові метрики, ризики та тренди з PDF у структурований JSON. І робить це на потоці — 500 звітів на годину. На відміну від звичайних парсерів, наш пайплайн використовує LLM для адаптивного вилучення, що дозволяє обробляти звіти з нестабільною розміткою. Наприклад, SEC EDGAR змінює HTML-структуру кожен квартал, але модель за контекстом знаходить потрібні секції.

Проблеми, які вирішуємо

Rate limiting і нестабільна структура. EDGAR не дає більше 10 запитів на секунду, а HTML-розмітка звітів змінюється від кварталу до кварталу. Звичайні парсери на BeautifulSoup ламаються на першій же заміні class на id. Наш пайплайн використовує LLM для адаптивного вилучення — модель за контекстом визначає, де лежить Revenue, навіть якщо таблиця перейменована.

Вилучення неструктурованих розділів. MD&A, Risk Factors — це проза об'ємом 20–30 сторінок. Просто взяти текст — мало. Потрібно відокремити тренди від фактів, знайти числа в природній мові ("revenue increased by 12% to $5.2B") і обчислити sentiment. Для цього застосовуємо chain-of-thought промпти з few-shot прикладами з еталонних звітів.

Порівняння рік до року. Ризик, який рік тому був третім, а сьогодні — першим, сигналізує про проблеми. Система автоматично будує дельти: вилучає Item 1A поточного та попереднього року, обчислює семантичну близькість параграфів і маркує нове, посилене або ослаблене. Результат — список червоних прапорців з поясненням.

Як ми це робимо: стек і кейс

Використовуємо гібридну архітектуру: Python + LangChain + OpenAI GPT-4 (або локальний vLLM з LLaMA 3). Векторне сховище — Qdrant для семантичного пошуку за історичними звітами. Розгортання через Kubeflow на кластері GPU (A10G).

from langchain.chains import create_extraction_chain from langchain.chat_models import ChatOpenAI llm = ChatOpenAI(model="gpt-4", temperature=0.1) schema = { "properties": { "revenue": {"type": "number"}, "net_income": {"type": "number"}, "risk_factors_new": {"type": "array", "items": {"type": "string"}} } } chain = create_extraction_chain(llm, schema) result = chain.run(filing_text) 

Кейс: розпарсили 5000 річних звітів за ніч. Клієнт — хедж-фонд, який хотів відстежувати ротацію ритейлу в 10-K. Наша система за 8 годин обробила всі 5000 документів, виділила топ-10 компаній з різким зростанням згадок "inflation" і "supply chain". Ручна перевірка показала точність 97% за ризиками. Порівняння: три аналітика тиждень пилили б те саме. Наше рішення в 10 разів швидше і точніше. Зв'яжіться з нами, щоб обговорити аналогічний проект. Отримайте консультацію за вашими задачами.

Як система справляється з rate limit EDGAR?

SEC обмежує запити до 10 на секунду. Ми реалізували адаптивний тротлінг з чергою і повторними спробами при помилках 429. Для масового парсингу використовуємо розподілену архітектуру на базі Ray — навантаження розподіляється між інстансами, що дозволяє обробляти до 500 звітів на годину без блокування.

Технічна деталь: обробка XBRLБагато 10-K містять iXBRL-теги. Якщо їх не парсити, втратите точність. Ми використовуємо arelle для вилучення axis/concept. Це дає структурований доступ до фінансових метрик з таблиць. Детальніше про XBRL — у [Wikipedia](https://en.wikipedia.org/wiki/XBRL).

Чому точність вилучення досягає 98,5%?

Ми комбінуємо правила XPath для табличних даних і fine-tuned LLM для текстових розділів. Крос-валідація: числові дані звіряються з попередніми періодами, а текстові — за допомогою семантичного пошуку за еталонними звітами. Для фінансових показників точність ключових метрик — 98,5%.

Порівняння підходів: ручний і автоматичний парсинг

Параметр Ручний розбір Наш AI-пайплайн
Час на 10-K 4–6 годин 5 хвилин
Точність вилучення Revenue 80% 98,5%
Пропускна здатність 2 звіти/день 500 звітів/год
Вартість за звіт ~$200 ~$20

Економія на масштабі: при обробці 1000 звітів на місяць витрати знижуються в 10 разів, що окупає впровадження за 2–3 місяці.

Етапи роботи

  1. Аналітика — обговорюємо які звіти, метрики та сигнали потрібні. Збираємо еталонні звіти для крос-валідації.
  2. Проектування — обираємо моделі (GPT-4 / LLaMA 3 / Mistral), проектуємо схему вихідних даних і пайплайн аугментації.
  3. Реалізація — пишемо адаптер до EDGAR, парсери, ланцюжки LangChain, модуль дельт і дашборд.
  4. Тестування — прогоняємо на 100 випадкових звітах, порівнюємо з ручним розбором. Досягаємо recall > 95% за ключовими полями.
  5. Деплой — розгортаємо у вашому кластері або SaaS. Налаштовуємо моніторинг (uptime, latency p99, кількість оброблених звітів).

Терміни та вартість

Терміни: від 4 до 12 тижнів залежно від складності (базовий парсинг vs. кастомні бізнес-правила). Вартість розраховується індивідуально — залежить від обсягу звітів, необхідних моделей та потреби в GPU-кластері. В середньому, інвестиція окупається за 2–3 місяці за рахунок скорочення часу аналітиків на 80%.

Що входить в роботу

Модуль Опис Термін (тиж)
Адаптер EDGAR Автоматичний обхід rate limit, черга + retry 1-2
Пайплайн вилучення Парсинг HTML → нормалізація → NLP → JSON 2-4
Модуль дельт Порівняння періодів з візуалізацією в Grafana 1-2
Інтеграція з DWH Snowflake, Redshift, ClickHouse 1-2
Документація та навчання API, архітектура + 2 сесії 0.5
Техпідтримка 3 місяці включено

Типові помилки та як їх уникнути

  • Ігнорувати XBRL — багато 10-K містять iXBRL-теги. Якщо їх не парсити, втратите точність. Ми використовуємо arelle для вилучення axis/concept.
  • Надто агресивний rate limit — блокування IP на добу. Ставимо time.sleep(0.15) між запитами та моніторимо заголовок X-RateLimit-Remaining.
  • Не перевіряти encoding — SEC зберігає документи в Windows-1252. Без перекодування зламається UTF-8. Застосовуємо chardet і автоматично конвертуємо.

Наш досвід — 7+ років у NLP, 30+ проектів у фінансовій аналітиці. Надаємо гарантію на точність вилучення (98%+ за контрактом). Замовте пілотний парсинг 50 документів — результат покажемо за 2 дні. Отримайте консультацію за вашими задачами. Детальніше про формат EDGAR — Wikipedia.