Вы продаете билетов на самолеты? - Нет, только показываю. - Красивое…

Люди делятся на два типа: одни летают за тысячу рублей из Питера во Владивосток, другие сутками скрупулезно высчитывают маршруты через Казахстан, отказываются от багажа, соглашаются на микро-кресла и в итоге все равно получают космический ценник. 

Почему так происходит, как формируются цены на авиабилеты и как в итоге покупать их дешевле — рассказываю под катом.

Первые шаги

Для анализа данных надо определиться с базовыми параметрами входной информации:

  • Летать свободно можно только в рамках страны. Можно, конечно, и зарубеж, но из-за эпидемиологической обстановки по спросу есть явные искажения и международные направления реальной картинки не дадут. Когда “пыль уляжется” можно будет попробовать включить в анализ и эти направления;

  • Организовывать сбор информации о ценах по всем авиаперевозчикам не хочется — их много. Да и смысла особого нет, раз хочется дешево, то нас интересуют только лоукостеры, а точнее самый популярный. Что, кстати, явно видно из отчета по рынку авиаперевозок;

  • Маршруты выберем только самые популярные — в основном это будут туристические (Москва, Санкт-Петербург, Сочи);

  • Никаких пересадок, только прямые рейсы. Хочется ведь не только дешево, но и быстро.

Получается очень много ограничений, но посмотрим, что из этого получится в итоге.

С требованиями к данным определились, теперь надо эти данные собрать и структурировать. Сбор данных был осуществлен стандартным методом. Описывать его нет смысла, материала в сети предостаточно, хочется лишь отметить какие данные собирались и вот тут весь изюм.

Дело в том, что это будут не совсем классические временные ряды, это будет срез цен (далее пакет) с определенной глубиной на дату среза, чтобы было понятнее, то представлю эти данные.

Получаем такой вот “параллелограмм” цен, если бы глубина среза была равна трем дням.
Получаем такой вот “параллелограмм” цен, если бы глубина среза была равна трем дням.

В нашем случае это будет срез глубиной в 60 дней по каждому маршруту, начиная с 15 февраля 2021 года по 15 августа 2021 года.

Смысл пакета в следующем: обычно если хочется куда-то слетать, то дата “открытая”, есть лишь некоторый горизонт желания и вот пакет позволяет либо оперировать набором цен с глубиной x-дней, либо в любой момент выбрать определенное число дней до вылета и понять динамику.

Самое время определить маршруты. Прошу не судить строго, но вот выбранные мною направления:

Направления Откуда-Куда (итого  12 направлений).
Направления Откуда-Куда (итого 12 направлений).

Подготовка и проверка данных

С направлениями определились, сбор данных организован, собрано порядка 130 тыс. цен. В принципе неплохая база для анализа. Сейчас надо определиться с типом распределения и можно ли будет опираться при анализе на описательные статистики (спойлер: да, распределение данных — нормальное, можно использовать меры центральной тенденции, если этот этап не интересен, то его можно пропустить).

В качестве инструментария все стандартно: Python (pandas+mathplotlib+seaborn). Уровень владения у меня любительский, поэтому в анализе есть явный перекос в сторону идеи и подхода, нежели жонглирования пакетами для анализа.

Чтобы никого не смущать ценами вида 4999, округлим вверх до ближайшей 100, чтобы получить 5000, так “читать” данные будет проще, а рубль спишем на условность.

Исходный датасет:

Весь анализ будет построен на основных статистических показателях и все так же будет анализировать пакет цен. Для этого потребуется сгруппировать данные по дате пакета и добавить в датасет базовые статистические показатели такие как: среднее арифметическое, медиана, 1-3 квартиль. А так как надо будет изобразить тип распределения,  то сразу в датасет добавим среднеквадратическое отклонение для будущей стандартизации.

Код
def q1(x):
    return x.quantile(0.25)

def q2(x):
    return x.quantile(0.75)

df_agg = df_src.groupby(["uploaddate", "route", "route_name"]).agg({
  "price_round": ["mean", "median","std", q1,q2]
}).sort_values(['route','uploaddate'], ascending=True).reset_index()

df_agg.columns = ["uploaddate","route", "route_name", "mean", "median", "std", "q1", "q2"]
df_agg

Результат выполнения — это новый датасет, который будем использовать после:

Для того, чтобы полноценно можно было оперировать описательными статистиками, необходимо определить тип распределения, вероятнее всего нормальное, но лучше убедиться в этом. Для этого надо стандартизировать данные в рамках пакетов. Стандартизация в данном случае нужна, чтобы избавиться от сезонного фактора. Итак следующий код стандартизирует данные и готовит новый датасет (для визуализации распределения).

Код
df_zsc = df_src.merge(df_agg, how = 'left', left_on=['uploaddate', 'route','route_name'], right_on=['uploaddate', 'route','route_name'])
df_zsc['z_score'] = (df_zsc['price_round']-df_zsc['mean'])/df_zsc['std']
df_zsc

Результат выполнения — стартовый датасет со стандартизацией:

Данные готовы для визуализации, можно строить гистограммы распределения, причем сразу в разрезе направлений (route). Чтобы визуально было легче воспринимать данные, добавлю на график вспомогательную линию нормального распределения.

Код
plt.figure(figsize=(12, 9))
N = 1500
y = np.linspace(-4, 4, N)
for i in ROUTES.index:
    plt.subplot(3, 4, i+1)
    df_0tmp = df_zsc.loc[df_zsc['route'] == ROUTES.iloc[i,1]]
    plt.hist(df_0tmp["z_score"] ,bins = 120, alpha=0.8, label = ROUTES.iloc[i,2])
    plt.plot(y, stats.norm.pdf(y)*N, '--', alpha=0.8)
    plt.ylim([0, N/3*2])
    plt.yticks(np.arange(0, N/3*2+1, 300))
    plt.xlim([-4, 4])
    plt.legend(fontsize=8, loc='upper center')

plt.show()

Из диаграмм распределения видно, то имеем дело с нормальным распределением, а значит можно оперировать описательными статистиками для формирования выводов.

На этом этап подготовки и проверки данных подошел к концу. Самое скучное позади, теперь перейдем к поиску “интересностей”.

В поисках инсайдов

Начинаем искать ответы на вопросы: “а как ведут себя цены на билеты с течением времени? какие различия в ценообразовании между направлениями? Какая сезонность в модели формирования цен? Какие особенности есть? 

Весь анализ разбил на четыре раздела:

  1. Динамика стоимости пакета (медиана и среднее);

  2. Динамика стоимости 1 км по пакету;

  3. Динамика цен по дате вылета. Сезонность;

  4. За сколько дней до вылета оптимальнее всего покупать билеты.

Динамика стоимости пакета (медиана и среднее).

После преобразования данных по каждому пакету есть динамика медианы и среднего, именно эти метрики представлены на визуализации ниже. Добавлю немного расшифровки по полученному результату:

  1. Синяя линия — это медиана;

  2. Оранжевая — это среднее;

  3. Серая заливка — это коридор цен между 1 и 3 квартилем в пакете цен, чтобы обозначить диапазон 50% всех цен в пакете.

Код
plt.figure(figsize=(12, 9))
# визуализация результата, а именно: динамика стоимости пакета (медиана и средняя) 
for i in ROUTES.index:
    plt.subplot(3, 4, i+1)
    df_1tmp = df_agg.loc[df_agg['route'] == ROUTES.iloc[i,1]]

    # заливка области между 1 и 3 квартилем
    plt.fill_between(df_1tmp['uploaddate'], df_1tmp['q1'], df_1tmp['q2'],
                    facecolor='r',
                    alpha = 0.3,
                    color = 'grey',
                    linewidth = 2,
                    linestyle = '--')
    # основная часть визуализации
    plt.plot(df_1tmp['uploaddate'],df_1tmp['median'],linewidth = 2, label = ROUTES.iloc[i,2])
    plt.plot(df_1tmp['uploaddate'],df_1tmp['mean'],linewidth = 1)
    plt.legend(fontsize=10, loc='upper center')
    plt.xticks(['2021-04-01','2021-06-01','2021-08-01'],['01-apr','01-jun','01-aug'], fontsize=8)
    plt.yticks(np.arange(0, 10000+100, 3000), fontsize=8)
    plt.ylim([1000, 11000])
    plt.grid()

plt.show()

Картина получается весьма интересная: абсолютно разные динамики цен, видимо все направления получились уникальными в каком-то смысле. Но на две группы скорее всего их можно разбить: с выраженной летней сезонности и без нее. 

Москва же в свою очередь не является преимущественно туристическим направлением, видимо за счет деловых поездок и за счет выполнения функции хаба. Жить надо в Москве, чтобы не читать подобные статьи:)

Динамика стоимости 1км по пакету.

Этот пункт не особо связан с ключевым вопросом, но пройти его мимо у меня не получилось, уж больно любопытно стало понять различия показателя по разным направлениям.

Смысл такой: динамика медианы по пакетам делится на расстояние из А в Б.

Код
# мержим датасеты (подтягиваем растояние из А в Б) и считаем стоимость одного км
df_q20 = df_agg.merge(ROUTES, how = 'left', left_on=['route'], right_on=['shot_name'])
df_q20['cost1km'] = df_q20['median'] / df_q20['distance']
df_q20 = df_q20.drop(['id', 'shot_name', 'full_name','route','median','mean','std','q1','q2','distance'], axis=1)

# преобразование даты в текст, чтобы на графике название тиков нормально вывести
df_q20['uploaddate']=df_q20.uploaddate.map(lambda t:t.strftime('%m-%b-%d'))
df_q20 = pd.pivot_table(df_q20, values='cost1km', index=['route_name'], columns=['uploaddate'], aggfunc=np.sum, fill_value=0)

# сортировка по строкам от большего к меньшему         
df_q20['sum_cols'] = df_q20.sum(axis=1)
df_q20 = df_q20.sort_values('sum_cols' , ascending=False)
df_q20 = df_q20.drop(['sum_cols'],axis=1)

# визуализация результата    
plt.figure(figsize=(12, 5))
sns.heatmap(df_q20, cmap='RdYlGn_r', annot=False)
plt.title('Динамика стоимости 1км')
plt.xlabel('Дата среза')
plt.ylabel('Направления')
plt.show()

Основной вывод: перелеты по стоимости 1км все разные, причем что зависимости между аэропортом отправки или аэропортами приемниками никакой нет. Так же видно, что разница между самым дорогим километром и самым дешевым достаточно существенна. Если бы получить внутренние данные, то можно было бы понять почему так, но одна из версий, она же самая вероятная — затраты на перелет это всегда соотношение переменных и постоянных расходов, вероятнее всего по ряду направлений постоянные расходы сильно тянут вверх удельную стоимость 1км. Например, Казань — Москва (№1).

Динамика цен по дате вылета. Сезонность.

Не всегда желание улететь варьируется в диапазон дат, часто есть очень узкий диапазон в несколько дней, поэтому надо понять, как же ведут себя цены в конкретные даты вылета. 

А именно есть ли ярко выраженная сезонность?

Но так просто нельзя выбрать дату вылета, цены то у нас с глубиной в 60 дней, значит на каждую дату вылета есть всегда 60 цен в зависимости от “а за сколько дней смотреть”. Для примера возьму цены за 15 дней до вылета (забегая вперед скажу, что не важно за сколько дней до вылета смотреть цены, сезонная модель не сильно зависит от длительности дней до вылета; кому особо интересно, можно будет исходник покрутить).

Код
# фильтр датасета на 15ый день до вылета 
df_q30 = df_src[df_src['day_bef_dep'] == -15].reset_index()

# Визуализация результата
plt.figure(figsize=(12, 9))
for i in ROUTES.index:
    plt.subplot(3, 4, i+1)
    df_3tmp = df_q30.loc[df_q30['route'] == ROUTES.iloc[i,1]]
    plt.plot(df_3tmp['dep_date'],df_3tmp['price_round'],linewidth = 2, alpha = 0.8, label = ROUTES.iloc[i,2])
    plt.legend(fontsize=10, loc='upper center')
    plt.xticks(['2021-04-15','2021-06-01','2021-07-15'],['15-apr','01-jun','15-jul'], fontsize=8)
    plt.yticks(np.arange(0, 12000+500, 3000), fontsize=8)
    plt.ylim([1000, 12500])
    plt.grid()
    
plt.show()

Так и что получилось? 

Графики наглядно иллюстрируют, что:

  1. как и было отмечено ранее направления ведут себя крайне уникально, даже если смотреть под другим углом, есть мысль, что таким образом происходит в том числе корректировка цен на направлениях авиакомпанией;

  2. есть высокая волатильность внутри коротких диапазонов, т.е. есть недельная сезонность;

  3. присутствуют флуктуации — если хочешь полететь в длинные выходные(1 , 9 мая или 12 июня, то придется прямо хорошенько добавить к базовой цене).

Пункт 2 и 3 хочется разобрать подробнее, выведу коэффициенты сезонности внутри недельные, но чтобы было интересней и показательней отдельно выделю недели с длинными праздниками и недели без праздников.

Код
week_type = pd.Series(['К. сезонности внутринедельный','Неделя 1 Мая','Неделя 9 Мая','Неделя День России'])

# сдвиг +1 к дате вылета по вылетам из Казани, так как вылет ночью и надо уровнять с остальными.
df_q30 = df_src[df_src['day_bef_dep'] == -15].reset_index()
df_q30.loc[(df_q30['route'] == 'KZN -> LED') | (df_q30['route'] == 'KZN -> VKO'), 'dep_date'] += dt.timedelta(days=1)

# разметка недель, чтобы выделить праздничные.
df_q30.loc[(df_q30['dep_date'] >= '2021-04-26') & (df_q30['dep_date'] <= '2021-05-02'), 'wtype'] = week_type[1]
df_q30.loc[(df_q30['dep_date'] >= '2021-05-03') & (df_q30['dep_date'] <= '2021-05-09'), 'wtype'] = week_type[2]
df_q30.loc[(df_q30['dep_date'] >= '2021-06-07') & (df_q30['dep_date'] <= '2021-06-13'), 'wtype'] = week_type[3]
df_q30.wtype = df_q30.wtype.fillna(week_type[0])

# добавляю название дня недели. df_q30 этот кадр за 15 дней до вылета
df_q30['day_of_week'] = df_q30['dep_date'].dt.day_name()
df_q30['day_of_week_number'] = df_q30['dep_date'].dt.dayofweek
df_q30.reset_index()

plt.figure(figsize=(14, 10))
# формирование четырех тепловых карт по сезонности недельной (регулярная и праздничные недели)
for i in week_type.index:
    plt.subplot(2, 2, i+1)
    df_4tmp = df_q30.loc[df_q30['wtype'] == week_type[i]]

    # расчет внутринедельной сезонности
    df_q31 = df_4tmp.groupby(["day_of_week", "route_name", "day_of_week_number"]).agg({
      "price_round": ["mean"]
    }).sort_values(['route_name','day_of_week_number'], ascending=True).reset_index()
    df_q31.columns = ["day_of_week","route_name", "day_of_week_number", "price_round"]

    df_q32 = df_4tmp.groupby(["route_name"]).agg({
      "price_round": ["mean"]
    }).sort_values(['route_name'], ascending=True).reset_index()
    df_q32.columns = ["route_name", "price_round_mean"]

    df_q33 = df_q31.merge(df_q32, how = 'left', left_on=['route_name'], right_on=['route_name'])
    df_q33['seasonality'] = df_q33['price_round'] / df_q33['price_round_mean']

    df_q33 = pd.pivot_table(df_q33, values='seasonality', index=['route_name'], columns=['day_of_week_number','day_of_week'], aggfunc=np.mean, fill_value=0)
    df_q33.columns = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]

    # визуализация результата
    sns.heatmap(df_q33, cmap='RdYlGn_r', annot=True, fmt ='.2g', vmin=0.8, vmax=1.2, center= 1, cbar=True)
    plt.title(week_type[i])
    
plt.show()

По итогу можно отметить следующее: 

  1. есть явная недельная сезонность в стандартных неделях (без праздников), а именно улететь в точки Б в пятницу и субботу будет стоить дороже, чем в остальные дни; кроме двух направлений — это Казань—Москва и Казань—Санкт-Петербург, эти два направления почему-то дороже всего в понедельник и во вторник. Почему так — дискуссионный вопрос;

  2. далее хочется отметить, что изменение цен на вылет под праздники самый значительный, в особенности первомайские праздники и День России, а вот День Победы не совсем явная флуктуация, видимо основной спрос приходится на 1 Мая и плавно растягивается на неделю.

Остался самый последний вопрос — а за сколько же все таки дней покупать, чтобы не платить премию авиаперевозчику?

Для ответа на этот вопрос представлю тепловую карту. В качестве значений будет отклонение вверх и вниз от медианного значения в пакете.

Код
# формирование df_q40 - отклонение от медианного значения
# глубина данных слегка подфильтрована, а то если присутсвует корректировка модели 
# ценообразования, то этот фактор испортит данные
df_q40 = df_src[df_src['uploaddate'] >= '2021-04-01'].reset_index()
df_q40 = pd.pivot_table(df_q40, values='price_round', index=['day_bef_dep'], columns=['route_name'], aggfunc=np.mean, fill_value=0)
df_q40 = (df_q40/df_q40.median(axis=0)-1).T

# визуализация результата
plt.figure(figsize=(12, 5))
sns.heatmap(df_q40, cmap='RdYlGn_r', annot=False,vmin=-0.2, vmax=0.2, center= 0)
plt.title('Лучшее время покупки билетов')
plt.xlabel('Дней до вылета')
plt.ylabel('Направления')
plt.show()

Интересно получается: выходит, что покупать билет заранее вроде как и нет смысла, более того по ряду направлений “заранее” стоит дороже, чем если купить за 15-30 дней до вылета. Ну и конечно не надо покупать билеты за 1-5 дней до вылета, это с большей долей вероятности обернется серьезной переплатой.

На этом все!

Еще раз перечислю основные выводы, которые отвечают на базовый вопрос:

  1. единственного ответа на вопрос ценообразования нет, каждое направление ведет себя уникально;

  2. ряд направлений обладают летней сезонностью, что в принципе очевидно для всех, но все равно отмечу;

  3. если есть определенная дата вылета, то надо понимать, что в соседние даты цены могут сильно отличаться, потому что присутствует внутринедельная сезонность;

  4. вылет под длинные праздники — это всегда сильно дороже, надо запомнить это правило;

  5. лучшее время для покупки — это отдельные размышления, потому что правило сильно заранее — это не всегда сильно дешевле, но и за несколько дней до вылета лучше не мечтать об удачном приобретении.

Наверное, можно было еще что-то “выжать” из полученных данных, но, как мне показалось, для размышления хватит.

P.S. если не надоест собирать цены, то через год будет вторая версия, где можно будет еще зацепить тему изменения цен год к году.

Комментарии (83)


  1. N-Cube
    16.08.2021 07:49
    +10

    Люди делятся на два типа: одни летают за тысячу рублей из Питера во Владивосток

    А в результате на графиках показана минимальная цена около 3 000 руб от Новосибирска до Питера. Это уже не ложь, это наглая ложь (с) - доказано статистикой.

    P.S. Притом разброс цен за несколько месяцев минимален и подозрительно близок к выбранному автором порогу округления 100 руб.


    1. phanerozoi_evidence
      16.08.2021 08:32
      -5

      А в результате на графиках показана минимальная цена около 3 000 руб от Новосибирска до Питера.

      Ну почему ложь? Не знаю как сейчас правда, но в начале пандемии я летал в командировки в Питер—Новосибирск; Новосибирск—Питер в лабораторию НИИ "Вектор". Так вот стоимость билета на уральских авиалиниях от Питера до Новосибирска состояла 2500— 3000 рублей. Обратно столько же. Т.е 6000 рублей против 30000 рублей. Поэтому статистика статистикой, но статистика везде говорит полправды, а иногда врет. Проверено статистикой.


      1. Apokalepsis
        16.08.2021 10:15
        +1

        Несколько дней назад знакомый из Новосибирска прилетел победой за 28000, туда летел за 8. Да и всегда в среднем цена была 6-8 до Новосиба, обратно дороже. В Иркутск 8-10.

        P.S. Из и в Москву


        1. Sadeid
          16.08.2021 10:25
          +2

          И в том же самолёте были люди, летевшие за 2000 рублей. Просто они не в овербукинг билеты брали. А так да, за сутки до вылета свою тушку в полный самолёт просунуть и в разы дороже бывает. И не такой стоп-ценник выкатывали. А вот того, кто из-за Вашего знакомого в самолёт не поместился, просто отправили Аэрофлотом каким-нибудь тысяч за 10-12 и все довольны.


        1. sandro_ballack
          16.08.2021 15:18

          Ну, года 3-4 назад, не помню уже, честно говоря, я до Красноярска и обратно из Москвы долетел за 6к рублей, включая по 400 рублей за выбор мест на каждый рейс. Итого: ~2600 рублей в одну сторону. Летал в районе ноября-декабря на выходных.


          1. Sadeid
            16.08.2021 16:05

            Это нормальная цена.


    1. Desprit
      16.08.2021 11:58

      В августе 2020 я слетал в Новосибирск из Санкт-Петербурга за 7000 туда и обратно. Билет брал приблизительно в июле.


      1. N-Cube
        16.08.2021 12:19
        +3

        Автор обещает рассказать, как можно «за тысячу рублей» прямо под заголовком. И по его же результатам получается, что это намеренная ложь.

        Люди делятся на два типа: одни летают за тысячу рублей из Питера во Владивосток…

        Почему так происходит, как формируются цены на авиабилеты и как в итоге покупать их дешевле — рассказываю под катом.


        1. hw_store
          16.08.2021 13:19
          +3

          "Есть ложь, есть намеренная ложь, а есть искусство заголовка" )))


        1. phanerozoi_evidence
          16.08.2021 13:54
          -2

          Ну, а где слово – обещает? Тут понятно, что тысяча это весьма утрированно. Нужно просто написать автору, чтоб тысячу взял в кавычки


        1. phanerozoi_evidence
          17.08.2021 16:48

          Люди ниже в комментариях пишут, что и за 1000 летали, хде ложь то?=))


        1. euroUK
          16.08.2021 17:31

          Речь идет про Российские реалии. В Амстердаме тоже можно получить, но рейсы рассматриваются из Москвы.


    1. 5for3
      16.08.2021 19:32
      +1

      Вы не поверите, но есть и за 2499 руб на февраль. Туда-обратно 4998 р. за LED-OVB-LED. Ссылка- подтверждение: Билет за 2499 р. OVB-LED


    1. a1mir
      17.08.2021 07:34
      +1

      Летал за 1000р в Новосибирск и за 1000р обратно на майские (1-5 мая), покупал в феврале (вроде бы) на распродаже смартавиа.

      Ловить распродажи разных авиакомпании и покупать за полгода - сильно выгоднее при долгосрочном планировании


  1. anonymous
    00.00.0000 00:00


    1. euroUK
      16.08.2021 09:33
      +1

      С точки зрения США, не дают визы, и цены на перелеты копеечные. Если визы опять станут давать (что маловероятно), то и цена сразу пойдет вверх


      1. in_heb
        16.08.2021 22:21

        Сейчас визы в США получают в других странах. Есть даже так называемый визовый туризм


        1. euroUK
          17.08.2021 09:38

          Сейчас в другие страны не сказать что тоже так просто приехать. А куда просто - там и очередь не на пару дней.


          1. in_heb
            17.08.2021 09:51

            Если из РФ, то Кипр, ОАЭ как пример. Страны где куда не нужна виза, которые пускают как туристов и там можно без особых проблем податься на американскую визу. Было бы желание


            1. euroUK
              17.08.2021 11:04

              Только вот написано, что с августа на Кипре не дают визу не резидентам. А так да, все очень просто.


              1. in_heb
                17.08.2021 14:44

                Я не слежу за ситуацией каждый день, но знаю людей кто получал визу в ОАЭ, на Кипре и в Грузии. Сейчас вон открыли Чехию со следующей недели и Венгрия открыта. Уверен, что варианты есть


                1. euroUK
                  17.08.2021 15:26

                  Вы видимо не поняли, проблема с визами она по всему миру. США просто ограничила прием по санитарным причинам, в большинстве стран принимают только резидентов.

                  Люди мотаются по всему миру чтобы получить эту визу. И грубо говоря, я бы сам смог бы съездить, но вот на всю семью так получать я уже не буду.


                  1. in_heb
                    17.08.2021 16:21

                    теперь понял, я думал речь идет про политический конфликт РФ-США, который затронул выдачу виз в Москве, а тут про санитарные ограничесния


            1. euroUK
              17.08.2021 11:09

              А в ОАЭ запись на 2022 :)
              А на словах все просто


  1. anonymous
    00.00.0000 00:00


  1. iPharaon
    16.08.2021 09:37
    +1

    Почему-то всегда думал, что если берёшь билет заранее, то он стоит дешевле.

    Этим летом собрался в гости к родственникам на юга, заранее спланировал отпуск и взял билет из Москвы до Анапы более чем за месяц до вылета за 4600 и очень удивился, когда за 3 дня до вылета, можно было взять билет на тот же рейс чуть более, чем за 3000.

    В итоге не стал париться и купил обратный билет за 3 дня до вылета за 2600.


    1. Kanut
      16.08.2021 10:04
      +12

      Совсем заранее дешевле чем незадолго до вылета. За пару-тройку дней до вылета часто дешевле всего потому что авиакомпаниям невыгодно гонять полупустые самолёты.


      Но при этом нет никакой гарантии что за пару-тройку дней до вылета вообще будут билеты на нужный вам рейс.


  1. Sadeid
    16.08.2021 10:11
    +8

    Не учтены распродажи, кассовый разрыв авиакомпаний, когда спрос минимален, а деньги очень нужны, потому что лизинг за самолёты надо платить, и ещё сотни факторов. Если очень грубо и без привязки к направлениям, то во вторник до 11 утра покупать билеты выгоднее, чем в пятницу вечером. Распродажи перед открытием сезонного расписания шикарны, в январе-марте на лето можно по стране за 1000-2000 рублей сегмент закупаться хоть куда. То, что применимо к Победе, не применимо к Аэрофлоту и ещё сотни нюансов.

    Пы.Сы. 150+ перелётов за свой счёт. За лето 20+ перелётов, почти все примерно за 1000 рублей сегмент. На этой неделе лечу в Калининград за 2000 туда/сюда, сейчас на эти рейсы билеты 25000 на сайте авиакомпании.


    1. expertykt
      16.08.2021 10:35
      +4

      В Якутск летом слетаете за 1000 - тогда и говорите)


    1. hw_store
      16.08.2021 13:26
      +2

      таки не очень подробно раскрыта методика поиска таких вариантов... не покупаете же вы 20 билетов на разные маршруты за полгода вперёд?


      1. Sadeid
        16.08.2021 15:13
        +1

        Покупаю. Даже больше покупаю. Почему нет?


        1. hw_store
          16.08.2021 16:08
          +4

          Мне кажется, спланировать график поездок на полгода вперёд, да ещё неукоснительно его придерживаться (ведь по льготной цене билеты невозвратные?) - для среднестатистического человека не очень реально


          1. Kanut
            16.08.2021 16:11
            +1

            Мне кажется это просто вопрос привычки плюс наличие подходящих "сопуствующих" вроде адекватной работы с чётко планируемыми заранее отпусками. То есть я знаю кучу людей у которых такое великолепно работает.


            П.С. А билеты по льготной цене точно всегда невозвратные?


          1. Sadeid
            16.08.2021 16:16

            Для человека нет, для семьи - да. Я на выходные/праздники летаю. Когда будет суббота/воскресенье я и на год вперед знаю. =)


          1. PEgorov
            16.08.2021 16:46

            Почему? Скорее наоборот - это значительно проще для планирования, ведь чем дальше находится событие, тем больше пространство для выбора, и это касается всего, начиная от цен на билеты, заканчивая выборкой доступных отелей.


            1. hw_store
              16.08.2021 20:07
              +1

              Мне просто не пришло в голову, что речь идёт о поездках выходного дня ))


    1. MockBeard
      16.08.2021 14:01

      очень интересно, можно подробнее?


      1. Sadeid
        16.08.2021 15:19
        +4

        Это целый пост пилить придётся. Много зависит от направления, куда-то можно чартеры вылавливать, куда-то только регулярные, где-то точно будут дешевые распродажи, а куда-то милями сильно дешевле, чем за деньги. Покупать лучше утром, спрос на покупку ниже, цены не скачут, во вторник до 11 утра обычно минимальные цены. Сильно заранее не значит дешевле, скорее наоборот, потом ценник корректируют в зависимости от спроса на этот день, фаз луны, кассового разрыва и настроения продажника. По турам отдельная история, иногда дешевле отдохнуть 12 дней, чем 10, просто потому что на дату вылета спрос высокий и цена в стоимости тура сильно выше, всегда надо с датами поиграть с соседними. Ну и ещё сотни нюансов.


        1. sets
          16.08.2021 15:35
          +3

          Это был бы очень интересный пост. У меня сейчас типичный алгоритм такой:
          1. Зайти на авиасейлз
          2. Поискать там нужный перелет на нужные даты
          3. Посмотреть альтернативные перелеты (в соседние города с нужным, где легко добраться на чем-нибудь еще)
          4. Вздохнуть
          5. Купить
          Я и так понимаю, что это не самый оптимальный путь, но вот это вот «чартеры вылавливать» указывает, что это тотально не оптимальный путь и где-то существует параллельный мир людей, которые знают как надо.


          1. Sadeid
            16.08.2021 15:56

            Смотря как посмотреть. С точки зрения трудозатрат оптимальный. С точки зрения финансов мне в августе в тот же Крым или Калининград за 1000 рублей больше нравится летать.

            Но опять же, если требуется нужный перелёт на нужные даты, то пространства для маневра не много остаётся. А вот если можно поиграть с датами, не жёсткое направление (допустим Крым, Анапа, Геленджик или Сочи, без разницы), да ещё и запас по времени есть, то можно распродажу подобрать подходящую, благо проводятся они регулярно и ту же январскую я всегда жду с нетерпением.


            1. sets
              16.08.2021 16:06

              Я готов увеличить трудозатраты, мне только нужны ЦУ что делать)
              Да, большинство перелетов у меня на нужные даты. Но вот конкретная задача — на август следующего года купить билеты туда-обратно на Камчатку. Думали покупать где-то в ноябре, типа заранее, это глупая идея? Лучше подождать январской распродажи? Как о ней узнать, подписаться на рассылки всех перевозчиков? Через чью постель ловить чартеры?)


              1. Sadeid
                16.08.2021 16:14

                Камчатка август это Аэрофлот/Россия. С конца января по конец апреля будут варианты за 23800 с багажом за туда/сюда. Это если про прямой рейс говорить. Если есть интерес поиграть с маршрутом, то у Ы7 точно будут билеты через Новосибирск, где можно день другой на стоповер потратить или сложный маршрут типа Москва - Владивосток - Камчатка - Новосибирск - Москва с разными стыковками от простой пересадки до пары суток прогулок за те же условные 23-25 тысяч за весь маршрут. Ну и подпишитесь на акции у обеих авиакомпаний.

                Пы.Сы. Среди лета тоже выбрасывают билеты за такие деньги, но уже на непопулярные даты и количество не то.


            1. Javian
              16.08.2021 16:08

              Маловероятно, что есть субсидированные билеты так, чтобы было 1000 рублей

              Аэрофлот открывает продажу билетов на субсидированные перевозки в города Дальнего Востока, Калининград и Симферополь

              Аэрофлот открывает продажу авиабилетов по субсидируемым государством тарифам. Купить билеты можно в города Дальнего Востока, а также в Калининград и Симферополь.

              Тарифы действуют на прямые рейсы авиакомпаний Группы «Аэрофлот» в экономическом классе обслуживания для перевозок до 31 декабря 2021 года. Доступны следующие направления:

              Направление

              Тариф в одну сторону, руб.

              Владивосток — Москва

              7400

              Петропавловск-Камчатский — Москва

              7500

              Хабаровск — Москва

              7200

              Южно-Сахалинск — Москва

              7300

              Магадан — Москва

              7200

              Хабаровск — Магадан

              4000

              Хабаровск — Новосибирск

              5700

              Хабаровск — Владивосток

              1800

              Хабаровск — Красноярск

              6000

              Хабаровск — Петропавловск-Камчатский

              2500

              Хабаровск — Иркутск

              3000

              Хабаровск — Южно-Сахалинск

              1000

              Владивосток — Петропавловск-Камчатский

              6000

              Владивосток — Южно-Сахалинск

              1500

              Калининград — Москва

              3800

              Калининград — Санкт-Петербург

              3500

              Симферополь — Сочи

              2500


              1. Sadeid
                16.08.2021 16:18

                Вы путаете акционные и распродажные билеты от субсидированных. Субсидированные это для пенсионеров и молодежи, с жёстким тарифом. Никогда не пользовался. Я очень далёк возрастом и от пенсионеров и от молодежи.


              1. Sadeid
                16.08.2021 16:19
                +1

                Вот Вам "невероятный" билет. Ближайший мой перелёт.


                1. i_shutov
                  16.08.2021 21:56

                  Как упражнение по аналитике и перемещения одного человека с зубной щеткой и кучей свободного времени — хороший вариант. Но мелковато. И не получается "вечного двигателя". Болтаться просто так на стране на самолетах можно еще дешевле — работа есть такая, курьерская супер-экспресс доставка документов и грузов. Еще и платить будут. Но тут работа-аэропорт-аэропорт-работа.


                  Куда сложнее планирование отпуска на семью из N > 4 человек, которое в такие схемы совсем не укладывается. Там надо играть комплексно и более сложно. Комбинация с букингом, трафиком, композиция билетов с багажом/без, субсидируемые компоненты, баллы и карты. При таких раскладах даже такси дешевле может оказаться чем аэроэкспресс на всех.


                  И, кстати, лучше уж дать оценку интегрального эффекта от мышиной оптимизации. Удалось отыграть 30-40% от просто покупки заранее за баллы, что в условиях динамического формирования цен вполне себе хорошая стратегия?


                  Кстати, тут гораздо интереснее, глубже и нет громадного разрыва между заголовком и содержимым:



                  1. Sadeid
                    17.08.2021 08:35

                    24 литра ручной клади + рюкзак до 5кг + зонт. Не знаю какая у Вас зубная щётка, а я за 150+ перелётов багаж не брал ни разу. Мне столько вещей даже на две недели в Сургуте зимой не нужны, не говоря уж про поездки выходного дня.


                    1. i_shutov
                      17.08.2021 08:41

                      1. Прочитайте комментарий далее одного абзаца. Там написано.
                        В советское время так студенты на поездах катались. Вообще бесплатно, с проводником договаривались.


                      2. Полеты одиночки по России малоинтересны. Ну да, можно. А еще лучше промобилеты ловить. Но цель то тут какая кроме прокачивания аналитических навыков?
                        Опять же, в приведенных в комментарии ссылках материал куда более целостнее и любопытнее.



        1. MockBeard
          16.08.2021 15:35

          спасибо


  1. anonymous
    00.00.0000 00:00


    1. andersong
      16.08.2021 11:37
      +4

      Недавно считал путешествие для моего семейства: дешевле всего на такси, немного дороже на самолете, на поезде дороже всего.


  1. ZekaVasch
    16.08.2021 11:31

    Ну не летает никто из Питера во Владивосток за 1000..

    Можно было погуглить плоский тариф..


  1. qbertych
    16.08.2021 12:09

    Заголовок спойлера
    image

    Из диаграмм распределения видно, то имеем дело с нормальным распределением,

    Это можно много как назвать, но уж точно не нормальным распределением.
    Да и зачем оно вам? Судя по следующей картинке, вам вполне хватает медианы ± одного квартиля.


  1. Vsevo10d
    16.08.2021 12:58
    +4

    Глубина 60 дней- сделано, "недельная сезонность" (щито?) отражена, не сделано главное: дешевизна билетов относительно времени суток.

    Как будто я билетов не покупал и не знаю, что дешевле - это всегда какое-то неудобье, типа вылета в 7 утра или прилета после полуночи. Вот окажусь я в первом часу ночи в Шарике, когда аэроэкспресс уже не ходит, и все это кроилово весело потрачу на такси.


    1. Bellerogrim
      16.08.2021 13:16

      Ну да, в Стамбул дешевле всего в понедельник в шесть утра с восьмичасовой пересадкой в Цюрихе (без багажа без питания с неопределённым и негарантированным местом).

      > в первом часу ночи в Шарике, когда аэроэкспресс уже не ходит

      Есть ночной автобус Н1.


      1. hw_store
        16.08.2021 13:31

        Вот за это я и люблю перелёты с пересадками... а то когда б ещё довелось побродить по ленинским местам... хотя 8 часов это наверное ту мач


      1. Vsevo10d
        16.08.2021 14:11

        Да. Ходит примерно в твой район, а дальше гуляй в ночи с багажом как хочешь.


        1. Sadeid
          16.08.2021 15:24
          -2

          Каршеринга полная Москва. Вообще никакой проблемы.


        1. MacIn
          16.08.2021 20:21

          Вы говорили про Аэроэкспресс, это 450 рублей с носа. Вычтем отсюда 50 за билет на автобус, остается 400р на такси на месте — вполне вроде неплохо.


          1. Vsevo10d
            17.08.2021 10:59
            +1

            Опять начинаются частности, а автобус, а такси. Речь шла про билеты на самолет, я указал на то, что ночной прилет - это гарантированные сложности и дополнительные траты. Сколько - уже не суть важно, может я в деревне под Химками живу и такси действительно возьмет всего 400 рублей. Прямо сейчас от моей работы, мягко говоря не спальный район, эконом до терминала F стоит больше тысячи.


            1. MacIn
              18.08.2021 08:22

              Опять начинаются частности, а автобус, а такси. Речь шла про билеты на самолет, я указал на то, что ночной прилет — это гарантированные сложности и дополнительные траты

              Я согласен с тем, что ночной прилет — потенциально более неудобен, но частности задали вы сами:
              окажусь я в первом часу ночи в Шарике, когда аэроэкспресс уже не ходит, и все это кроилово весело потрачу на такси.

              И «размен» АЭ на автобус в ближайший к точке назначения пункт + более дешевое такси уже не из аэропорта — вполне решение.


        1. Bellerogrim
          17.08.2021 09:59

          Аэроэкспресс, надо полагать, до двери квартиры довозит?


          1. Vsevo10d
            17.08.2021 11:00
            +1

            Когда ходит аэроэкспресс - ходит и метро.


  1. anonymous
    00.00.0000 00:00


    1. hw_store
      16.08.2021 13:30
      +1

      сейчас вроде из щарика ночные автобусы есть,
      но все равно неудобно - метро закрыто, в̶ ̶т̶а̶к̶с̶и̶ ̶н̶е̶ ̶с̶о̶д̶ю̶т̶


      1. Vsevo10d
        16.08.2021 14:16
        +4

        А напередергиваться вообще можно сколько угодно, хоть на второй самолет. У меня речь о принципе, а не о частностях. Речь в статье про российские аэропорты, где даже в столице ночь = неработающий транспорт = трансфер. Вполне себе важный фактор, просто я в Новосибе например не был - может там еще хуже с дешевым муниципальным автобусом и рвачами- таксистами.


  1. anonymous
    00.00.0000 00:00


  1. Javian
    16.08.2021 14:56

    дороже всего в понедельник и во вторник

    При покупке жд билетов это очень заметно. Студенты едут домой в пятницу, люди едут на отдых на выходные - спрос: цена самая высокая, так же как и в воскресенье. Дешевле всего где-то в четверг.

    В понедельник-вторник это рабочие поездки.


  1. zartarn
    16.08.2021 14:56

    Ко всему вышесказанному в коментариях: так же у победы бывают некие моментальные скидки, что заходишь и видишь по среди недели более дешевый билет, при покупке, если так же заходишь с тем же запросом, даже с друого утсройства - уже нет такого.

    Еще привязка к некоторым сезонным датам - перед самым 1 сентября к примеру, цены могут быть заметно дороже. А начиная с 1 - в два раза дешевле чем то что накануне.

    победа


  1. santjagocorkez
    16.08.2021 14:59
    +7

    Сбор данных был осуществлен стандартным методом. Описывать его нет смысла, материала в сети предостаточно, хочется лишь отметить какие данные собирались и вот тут весь изюм.

    Ну да, конечно, зачем же в "статистическом исследовании" сообщать такие скучные и ненужные детали, как: источник данных, достоверность данных, полнота данных и тому подобное. Особенно, если "исследователем" препарируется лоукостер, известный своими закидонами со "стандартным ящиком проверки ручной клади" (была даже история, что на стойке регистрации был ящик одной конфигурации, а в салоне самолёта - другой, и, естественно, салонный фильтр ручная кладь уже не прошла). И за всё плати. И ценник да каждый доп - конский. И лететь с тем же уровнем комфорта этим самым лоукостером дороже, чем его большим братом по стандартному тарифу. Вообще мелочи, не стоит даже заморачиваться. Все же летают в Сочи без багажа, ручной клади и верхней одежды MOW - AER.


  1. koreychenko
    16.08.2021 15:01
    +4

    А вы не рассматривали, что сейчас много у кого индивидуальное ценообразование? Т.е. по цене вообще ничего не понятно. Просто умная система посчитала, что вы купите этот билет за 30000 с большой вероятностью. И это не очень связано с временем покупки, овербукингом и т.п. В минус, скорее всего, они торговать не будут (хотя, бывает и такое)
    Как такие штуки ловить?
    Ну, типа как аггрегаторы такси в зависимости от модели телефона разную цену дают?


  1. F0iL
    16.08.2021 17:14
    +5

    Когда с женой жили в Питере, 2-3 раза в год регулярно летали в родную Уфу навестить родственников. На этом направлении монополистом в течении очень долгого времени был Аэрофлот (точнее его дочка Россия), летать с пересадками через Москву мы зареклись после пары неудачных случаев (когда из-за снегопадов и туманов чуть было не встретили новый год в транзитном аэропорту), поэтому пришлось пользоваться ими.
    И на протяжении многих лет я специально регулярно мониторил цены на разные даты и с разными промежутками до даты вылета. Заключение было весьма печальное: все эти "за две недели до вылета цена может подешеветь чтобы заполнить рейс", "лучше покупать во вторник с утра", "не заходите на сайт авиакомпании с дорогих железок, а лучше вообще используйте режим инкогнито", и прочие-прочие "правила" не работали вообще никогда и никак. Единственное правило, которое работало, было "Цена на билеты будет расти. Всегда. Чем ближе к дате вылета -- тем сильнее." Ну и само собой, никаких там акций и распродаж на этом направлении за эти много лет ни разу не наблюдалось.


  1. Tyusha
    16.08.2021 17:21
    +2

    Ерунда какая-то. Никаких значимых закономерностей. Особенно последняя карта. Результаты противоположные при покупке билетов в последние дня. Предположу, что цена билета динамически зависит от успешности текущих продаж билетов на данное направление. Билеты разбирают хорошо — цена подрастает, разбирают плохо с отставанием от графика, то включается скидка. Наверняка авиакомпания хорошо знает как должны идти продажи по плану продаж: за 3 месяца должно быть продано 10% мест, за 2 недели 70% — что-то типа того.


  1. sulion
    17.08.2021 07:35

    Исходные данные бы пополнее в плане представительности выборки

    Статистика очень чувствительна к разным помехам - чуть не то меряли, чуть недобрали по количеству проб, чуть не так готовили выборку - и всё

    Поиск закономерностей между сущностями бывает порой плодотворнее - и проще! А все потому что такой поиск существенно меньше подвержен помехам

    Вспоминается из юности в спортивных науках, как с очень простыми уравнениями, но основанными на физике процесса, я получал результаты полезнее и ближе к жизни спортсменов, чем проведённый тренером статистический анализ


  1. tim_saf
    17.08.2021 07:35
    +1

    Более 7 лет регулярно летаю Москва-Казань-Москва. Примерно 10-14 полетов в год. Можете что угодно рассказывать, но на этом направлении самолеты всегда битком и как вы ни крутитесь, но если захотите улететь в пятницу вечером и вернуться вечером воскресенья во вменяемое время, то потратите от 9 до 12к. Все эти "инсайты" в итоге упрутся в полеты вида "Вторник вылет в 13:50" то есть супер неудобное время и день.
    Если летать чисто в отпуск, то разницы нет. Если летите по делам или к родственникам на выходные то хоть за полгода покупаете, в 2 раза не сэкономите. Все самые "вкусные" рейсы всегда дороги.


    1. Sadeid
      17.08.2021 08:37
      +1

      ага ага


      1. tim_saf
        17.08.2021 09:23
        +1

        Самый разгар карантина, когда все закрыто? Более исключительный случай сложно найти :)


        1. euroUK
          17.08.2021 09:41
          +1

          Да и в 6 утра посадка это явно не самый "вкусный" рейс. Всего-то в 4 утра надо встать.


          1. Sadeid
            17.08.2021 09:58

            Вы определитесь, либо Вам самый вкусный, либо дешевый. Летайте за 12к, зато поспите до восьми. Кто ж против-то.


            1. euroUK
              17.08.2021 11:05
              +1

              Ну так всегда есть варианты с 2мя пересадками полететь в 3 раза дольше и в 2 раза дешевле. Но я уж лучше прямым


              1. Sadeid
                17.08.2021 12:44

                Во-первых, не всегда. Во-вторых, на скрине прямой перелёт Аэрофлотом, в топовые даты на майские, за 2250 туда/обратно, который за сутки до вылета стоил 12+ косарей.


        1. Sadeid
          17.08.2021 09:57

          Не было там никакого карантина. Гулял, кушал в ресторанах, пользовался каршерингом, в Свияжск съездил. Может вы в другой Казани живёте, конечно. =)


  1. Delfnsk
    17.08.2021 10:53

    Интересное исследование, хоть и не хватает выводов и срезов под них с размерами выборок.

    А не подскажешь как собирал данные? мб есть какие-то источники?

    А то сходу виден лишь один вариант: скрипт для сбора и парсинга данных и по циклу несколько месяцев собирать (что кажется долгим). Ну и исходники, если не жалко, расшарьте пожалуйста, тоже покрутил бы.