AI-система безпеки польотів (Aviation Safety Analytics)

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
AI-система безпеки польотів (Aviation Safety Analytics)
Складний
від 1 тижня до 3 місяців
Часті запитання

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

Етапи розробки AI-рішення

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

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

AI-аналітика безпеки авіації

Авіаційний інцидент рідко трапляється через одну причину. ICAO описує це як "ланцюжок Хайнріха": фінальна подія - лише верхівка піраміди попередніх аномалій. AI-система для аналізу безпеки ловить ланки цього ланцюжка перед тим, як вони замкнуться.

Джерела даних та типи аномалій

Авіаційна безпека працює з кількома потоками:

  • FDR/QAR дані (Flight Data Recorder / Quick Access Recorder) — тисячі параметрів із частотою 4-64 Гц: швидкість, висота, режими двигунів, відхилення керма, прискорення
  • ACARS повідомлення — технічні повідомлення літак-земля, включаючи fault codes
  • ATC переговори — транскрипти переговорів із диспетчером (NLP)
  • FOQA (Flight Operational Quality Assurance) — програми моніторингу якості польотів
  • Дані техобслуговування - MRO записи, історія відмов компонентів

Типові аномалії для автоматичного виявлення:

Тип аномалії Параметри поріг прапор
Жорстка посадка Вертикальне прискорення при торканні >1.8g нормально, >2.6g - розслідування
CFIT precursor Швидкість зниження + рельєф + GPWS активація Патове поєднання
Engine over-temperature EGT/ITT залежно від режиму N1 Відхилення >15°C від envelope
Unstabilized approach ILS deviation + speed + flap config на gate altitude Будь-яка невідповідність SOP
Tail strike risk Pitch attitude при зльоті/посадці >10° за швидкостей

Алгоритм аналізу параметричних даних польоту

FOQA Event Detection через ковзні вікна:

import numpy as np
import pandas as pd
from scipy.signal import savgol_filter
from typing import List, Dict

def detect_flight_exceedances(
    fdr_df: pd.DataFrame,
    aircraft_type: str,
    phase_of_flight: str
) -> List[Dict]:
    """
    fdr_df: DataFrame с временными рядами параметров полёта
    Возвращает список событий-нарушений с временными метками.
    """
    exceedances = []

    # Сглаживание шума датчиков
    fdr_df['vsi_smooth'] = savgol_filter(
        fdr_df['vertical_speed_fpm'], window_length=11, polyorder=3
    )

    # Жёсткая посадка
    if phase_of_flight == 'landing':
        touchdown_mask = (
            (fdr_df['radio_altitude_ft'] < 5) &
            (fdr_df['radio_altitude_ft'].shift(1) >= 5)
        )
        touchdown_idx = fdr_df[touchdown_mask].index

        for idx in touchdown_idx:
            if idx in fdr_df.index:
                nz = fdr_df.loc[idx, 'normal_acceleration_g']
                if nz > 1.8:
                    severity = 'hard' if nz > 2.6 else 'firm'
                    exceedances.append({
                        'event_type': 'hard_landing',
                        'timestamp': fdr_df.loc[idx, 'timestamp'],
                        'value': round(nz, 3),
                        'threshold': 2.6,
                        'severity': severity,
                        'requires_inspection': nz > 2.6
                    })

    # Нестабилизированный заход: скорость вне коридора на 500 ft
    if phase_of_flight == 'approach':
        gate_mask = (
            (fdr_df['radio_altitude_ft'].between(480, 520)) &
            (fdr_df['flap_position'] < 30)  # не полный флап
        )
        gate_points = fdr_df[gate_mask]

        for idx, row in gate_points.iterrows():
            # Скорость должна быть Vapp ± 10 kt
            vapp = row.get('vapp_kt', 145)  # из FMS
            if abs(row['ias_kt'] - vapp) > 10:
                exceedances.append({
                    'event_type': 'unstabilized_approach_speed',
                    'timestamp': row['timestamp'],
                    'value': round(row['ias_kt'], 1),
                    'expected': vapp,
                    'deviation_kt': round(row['ias_kt'] - vapp, 1),
                    'severity': 'go_around_required'
                })

    return exceedances


def engine_health_anomaly(
    engine_params: pd.DataFrame,
    baseline_egt_delta: float = 0.0
) -> Dict:
    """
    EGT Margin — разница между фактическим и предельным EGT.
    Тренд снижения margin указывает на деградацию двигателя.
    """
    # Нормализация на условия (OAT, давление, N1)
    engine_params['egt_corrected'] = (
        engine_params['egt_c'] - engine_params['oat_c'] * 0.95
        - engine_params['altitude_ft'] * 0.002
    )

    # EGT margin trend за последние 50 циклов
    recent_cycles = engine_params.tail(50)
    x = np.arange(len(recent_cycles))
    slope, intercept = np.polyfit(x, recent_cycles['egt_corrected'], 1)

    # Тренд >0.5°C/цикл — признак деградации hot section
    degradation_rate = slope  # °C за цикл

    return {
        'egt_trend_per_cycle': round(degradation_rate, 3),
        'current_margin_c': round(
            engine_params['egt_limit_c'].iloc[-1] - engine_params['egt_corrected'].iloc[-1], 1
        ),
        'alert': degradation_rate > 0.5,
        'cycles_to_limit': (
            int((engine_params['egt_limit_c'].iloc[-1] - engine_params['egt_corrected'].iloc[-1]) / degradation_rate)
            if degradation_rate > 0 else None
        )
    }

NLP аналіз ATC переговорів

Транскрипти переговорів – недооцінене джерело провісників. Типові патерни ризику: нестандартні інструкції, перепитування clearance, перемикання частот у критичні фази.

from transformers import pipeline

# Классификатор на дообученном авиационном корпусе
atc_safety_classifier = pipeline(
    "text-classification",
    model="aviation-safety/atc-risk-classifier-bert",
    device=0
)

risk_patterns = [
    "say again",           # непонимание инструкции
    "unable",              # невозможность выполнения
    "traffic alert",       # TCAS
    "go around",           # уход на второй круг
    "emergency",
    "minimum fuel",
    "expedite"
]

def analyze_atc_transcript(transcript: str) -> dict:
    risk_keywords_found = [p for p in risk_patterns if p.lower() in transcript.lower()]
    ml_result = atc_safety_classifier(transcript[:512])[0]

    return {
        'risk_keywords': risk_keywords_found,
        'ml_risk_label': ml_result['label'],
        'ml_risk_score': round(ml_result['score'], 3),
        'requires_review': len(risk_keywords_found) > 0 or ml_result['label'] == 'HIGH_RISK'
    }

Кейс: FOQA моніторинг парку з 24 повітряних суден

Авіакомпанія-перевізник, 24 літака B737NG/A320. До впровадження системи FOQA аналізували вибірково – 5% рейсів вручну. Після автоматизації: 100% рейсів, 8 типів подій. За перші 3 місяці виявлено 340 нестабілізованих заходів (з них 38 — із значними відхиленнями), 7 жорстких посадок вище за поріг інспекції, деградація EGT margin на двох двигунах передбачена за 60 циклів до планової заміни гарячої секції. Система підняла один двигун на позапланове зняття - виявлені тріщини compressor blade.

Стек

Шар Технології
Прийом FDR/QAR ARINC 717/767 парсери, Python
Тимчасові ряди pandas, scipy, stumpy (matrix profile)
Аномалії двигунів LSTM Autoencoder (PyTorch)
NLP переговорів BERT fine-tuned на авіакорпусі
Зберігання TimescaleDB (тимчасові ряди)
Дашборд Grafana + кастомний React
Стандарти ICAO Annex 6, EASA AMC20-29, IS-BAO

Терміни: Базовий FOQA аналізатор параметричних подій - 6-8 тижнів. Повний стек із NLP, передиктивним обслуговуванням двигунів та дашбордом – 4-5 місяців.