features.tabular
Табличные фичи для CatBoost-трека (батч и онлайн — одна функция на точку).
Точка прогноза — (tr_id, T). Все признаки строятся строго по данным, доступным на момент T:
телеметрия с
event_time <= T(своя), очищеннаяclean_traffic;плановое расписание (план известен заранее; факт
time_fact_beginне используется вообще — в validate и на живом потоке его нет);подсказка
cur_dev_s.
Ключевая идея — фактические прибытия на пройденные остановки восстанавливаются из GPS
(gps_history): ТС ближе всего к точке остановки, потом отъехало. Так получаем честную историю
отклонений на момент T, одинаковую для train / test / validate / NDTP-потока.
Вторая идея — рейсы. Разрыв планового расписания > TRIP_GAP_S = конечная. Внутри рейса задержка
соседних остановок коррелирует на ~0.96, через конечную — на ~0.02. Поэтому признаки «сколько конечных
между T и целью» и «где цель внутри рейса» решают, можно ли доверять текущему отклонению.
Functions
|
DataFrame признаков (index = sample_id) для набора точек; |
Невалидные навигационные ячейки NDTP -> NaN; служебные значения speed/alt -> NaN; дубли пакетов убираем. |
|
|
Синтетические ТС (id >= 9_000_000) -> реальный прототип по совпадению последовательности адресов. |
|
|
|
Прибытия на пройденные к моменту T «автоматические» остановки. |
|
|
|
|
|
Точки, телеметрия и плановое расписание сплита (факт расписания отбрасывается). |
|
Телеметрия одного ТС из массивов (онлайн-путь). |
|
Все признаки одной прогнозной точки. |
|
Время пакета в целых секундах с округлением вверх: пакет 03:35:00.5 позже T = 03:35:00 и в прогноз на этот момент не попадает (строгое |
|
Classes
|
|
|
- class features.tabular.Stops(id: 'np.ndarray', plan: 'np.ndarray', lon: 'np.ndarray', lat: 'np.ndarray', mf: 'np.ndarray', trip: 'np.ndarray', idx_in_trip: 'np.ndarray', trip_len: 'np.ndarray', gap_prev: 'np.ndarray', cum_dist: 'np.ndarray')[исходный код]
Базовые классы:
object- __init__(id: numpy.ndarray, plan: numpy.ndarray, lon: numpy.ndarray, lat: numpy.ndarray, mf: numpy.ndarray, trip: numpy.ndarray, idx_in_trip: numpy.ndarray, trip_len: numpy.ndarray, gap_prev: numpy.ndarray, cum_dist: numpy.ndarray) None
- cum_dist: numpy.ndarray
- gap_prev: numpy.ndarray
- id: numpy.ndarray
- idx_in_trip: numpy.ndarray
- lat: numpy.ndarray
- lon: numpy.ndarray
- mf: numpy.ndarray
- plan: numpy.ndarray
- trip: numpy.ndarray
- trip_len: numpy.ndarray
- class features.tabular.Tele(ts: 'np.ndarray', lon: 'np.ndarray', lat: 'np.ndarray', speed: 'np.ndarray')[исходный код]
Базовые классы:
object- __init__(ts: numpy.ndarray, lon: numpy.ndarray, lat: numpy.ndarray, speed: numpy.ndarray) None
- lat: numpy.ndarray
- lon: numpy.ndarray
- speed: numpy.ndarray
- ts: numpy.ndarray
- features.tabular.build_features(points: pandas.DataFrame, traffic: pandas.DataFrame, schedule: pandas.DataFrame, route_of: dict | None = None) pandas.DataFrame[исходный код]
DataFrame признаков (index = sample_id) для набора точек;
route_of— tr_id -> маршрут (для клонов).
- features.tabular.clean_traffic(t: pandas.DataFrame) pandas.DataFrame[исходный код]
Невалидные навигационные ячейки NDTP -> NaN; служебные значения speed/alt -> NaN; дубли пакетов убираем.
- features.tabular.clone_sources(schedule_train: pandas.DataFrame) dict[int, int][исходный код]
Синтетические ТС (id >= 9_000_000) -> реальный прототип по совпадению последовательности адресов.
- features.tabular.dist_m(lon1, lat1, lon2, lat2)[исходный код]
- features.tabular.gps_history(tg: Tele, sg: Stops, T: int) numpy.ndarray[исходный код]
Прибытия на пройденные к моменту T «автоматические» остановки.
Идём по остановкам в порядке маршрута; прибытие = минимум расстояния (< ARR_RADIUS_M) в окне [plan − WIN_EARLY_S, plan + WIN_LATE_S] ∩ (prev_arrival, T], после которого ТС отъехало на LEAVE_M. Возвращает массив строк (stop_pos, plan, delay, arrival, dwell).
- features.tabular.index_schedule(schedule: pandas.DataFrame) dict[int, Stops][исходный код]
- features.tabular.index_traffic(traffic: pandas.DataFrame) dict[int, Tele][исходный код]
- features.tabular.load_split(dataset_dir: Path | str, split: str) tuple[pandas.DataFrame, pandas.DataFrame, pandas.DataFrame][исходный код]
Точки, телеметрия и плановое расписание сплита (факт расписания отбрасывается).
- features.tabular.make_tele(ts, lon, lat, speed, valid=None) Tele[исходный код]
Телеметрия одного ТС из массивов (онлайн-путь). Те же правила очистки, что в
clean_traffic.
- features.tabular.point_features(T: int, tgt_id, tgt_plan: int, cur_dev: float, tg: Tele | None, sg: Stops) dict[исходный код]
Все признаки одной прогнозной точки. Используется и в батче, и в онлайн-сервисе.
- features.tabular.tele_sec(values) numpy.ndarray[исходный код]
Время пакета в целых секундах с округлением вверх: пакет 03:35:00.5 позже T = 03:35:00 и в прогноз на этот момент не попадает (строгое
event_time <= T).
- features.tabular.to_sec(values) numpy.ndarray[исходный код]