Владивосток, оползни и логистическая регрессия

27–28 августа 2019 года во Владивостоке и Приморском крае произошли массовые оползни. К счастью, обошлось без жертв. Однако, материальные потери оказались существенными: разбитые автомобили, перекрытые дороги, поврежденные здания и детские площадки. Оползни сошли в момент прохождения мощного циклона с обильными дождями. Мы робко предположили что «осадки виновны», распаковали методы классической статистики и приступили к исследованию.

TL; DR

Копии архивов исторических данных вместе с кодом статистического анализа на Python здесь. Почитать опубликованную статью в Pure and Applied Geophysics можно тут.

Последствия оползневой активности в г. Владивосток, 28-29 августа 2019 г.   (a) ул. ТОбольская 11; (b) ул. Сафонова; (c) ул. Юмашева 20; (d) ул. Почтовая; (e, f) ул. Снеговая 64Последствия оползневой активности в г. Владивосток, 28–29 августа 2019 г. (a) ул. ТОбольская 11; (b) ул. Сафонова; © ул. Юмашева 20; (d) ул. Почтовая; (e, f) ул. Снеговая 64Последствия схода оползня в г. Владивосток, 28-29 августа 2019 г., на 5-й Террасной улице. Стрелки показывают направление потока.Последствия схода оползня в г. Владивосток, 28–29 августа 2019 г., на 5-й Террасной улице. Стрелки показывают направление потока.

Данные

Для того что бы исследовать зависимость оползней от выпавших осадков нам нужны две вещи: оползневые случаи и осадки с развитием во времени. С осадками всё относительно просто. Во Владивостоке действует одна из самых старинных станций (WMO Index 31960). Исторические метеорологические данные практически непрерывны с 01 января 1914 года. Архив наблюдений содержит ежедневные измерение температуры воздуха, количества осадков, температуры почвы на глубинах. Кстати, если вам нужны метеоданные для ваших исследований или проектов, то вот сайт с ними.

Набор данных (ката в новом редакторе нет, извините):

Набор данных

Позиция

Описание

Формат

wr43988

1

Индекс ВМО

5

2, 3, 4

Год, Месяц, День

4, 2, 2

5

Общий признак количества температур

1

6

Минимальная температура воздуха

5.1

7

Средняя температура воздуха

5.1

8

Максимальная температура воздуха

5.1

9

Количество осадков

5.1

wr43990

1

Индекс ВМО

5

2, 3, 4

Год, Месяц, День

4, 2, 2

5

Температура почвы на глубине 2 см

5.1

6

Температура почвы на глубине 5 см

5.1

7

Температура почвы на глубине 10 см

5.1

8

Температура почвы на глубине 15 см

5.1

9

Температура почвы на глубине 20 см

5.1

10

Температура почвы на глубине 40 см

5.1

11

Температура почвы на глубине 60 см

5.1

12

Температура почвы на глубине 80 см

5.1

13

Температура почвы на глубине 120 см

5.1

14

Температура почвы на глубине 160 см

5.1

15

Температура почвы на глубине 240 см

5.1

16

Температура почвы на глубине 320 см

5.1

С оползневыми случаями всё немного сложнее. Готового набора нет. Нам пришлось очень муторно и долго изучать новостные сводки, отмечая даты с оползнями. Каждый найденный оползневой случай соответствует отдельному дню в ряду наблюдений как бинарная переменная. В итоге получилась вот такая табличка. Все остальные дни были отмечены как неоползневые. Ввиду отсутствия объективных данных об оползнях до 1946 года, ряд наблюдений осадков для последующего анализа был сформирован с 01 января 1946 года по 01 апреля 2020 года.

Хорошо! Но с осадками всё не так просто. Дело в том, что на почву влияет не только дождь, который идёт прямо сейчас (Daily Rainfall или DR). Общий «параметр» увлажнения грунта зависит и от предшествующих осадков. И здесь у нас два варианта для создания производных переменных. Первый — это кумулятивное количество осадков c начала года (Cumulative Precipitation или CP). Второй параметр — это предшествующие осадки в определённом временном окне (Antecedent Rainfall или AR). AR придумали наши коллеги из Южной Кореи. Интуитивно, осадки выпавшие два месяца назад должны меньше влиять на некое триггерное увлажнение грунта после которого возникает оползень. В оригинальной работе параметр называется Inter event time definition (IETD) и рассчитывается он каждый час, так как в Южной Корее метеорологические данные более детальные. Параметр IETD в настоящем исследовании может варьироваться от 24 до 46 часов. Это связано с тем, что исходные данные представляют количество осадков за одни сутки и точно определить параметр IETD в часах по имеющимся историческим метеоданным невозможно. В общем случае, безосадочный период фиксируется отсутствием осадков (Rainfall per day = 0) в предшествующие сутки. То есть, если дождь лил непрерывно 7 дней, то AR будет учитывать кумулятивное значение за этот период. Если был 1 «сухой» день до оползня, то AR=0.

Разведочный анализ (Exploratory data analysis, EDA)

Scientific Dataist’ы скажут нам, что данные нужно покрутить, повертеть. Ну что ж, приступим. Для начала взглянем на распределение осадков по месяцам.

Распределение осадков по месяцам с января 1946 по апрель 2020 для города ВладивостокРаспределение осадков по месяцам с января 1946 по апрель 2020 для города Владивосток

Здесь мы видим наибольшее количество осадков с мая по октябрь, что несюрприз для муссонного климата Владивостока. Наибольшее количество дождей выпадает в августе. А та аномальная точка на 500+ миллиметров — это как раз наш август 2019-го.

Теперь посмотрим на данные сверху:

Оползневые случаи с января 1946 по апрель 2020 для города ВладивостокОползневые случаи с января 1946 по апрель 2020 для города Владивосток

Здесь у нас всего 34 оползня и с явным отрывом лидирует июль и август. Корреляция с осадками на лицо. Стоит отметить, что минимальное количество осадков за сутки для оползневого случая равно 54 мм. Возможно, это значение является критическим для оползневых процессов в нашем городе.

Матрица ковариаций, рассчитанная для всех переменных в результирующем наборе данных, показывает высокую положительную корреляцию температурных переменных 0.45≤ρ≤0.99. С другой стороны, переменные, связанные с осадками, имеют слабую положительную корреляцию между собой 0.058≤ρ≤0.14. В данных наблюдается выраженная положительная корреляция количества осадков в сутки и оползневыми случаями ρ=0.43.

Ковариационная матрица по всему набору данныхКовариационная матрица по всему набору данных

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

Ковариоционная матрица для Ковариоционная матрица для «осадочных» переменных

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

Сводная статистика по набору данных (кат тут не нужен, табличка ещё пригодится)

Variable

Obs.

Mean

Std. Dev.

Min

Max

All the data from 1946 year

Min air day temp

26978

1.754

11.887

-30.3

24.7

Avg air day temp

26978

4.631

11.604

-27.1

27.5

Max air day temp

26978

8.736

11.643

-24.1

33.6

Temp at a depth (20 cm)

14581

6.274

9.554

-18.6

24.1

Temp at a depth (40 cm)

14565

6.510

8.455

-13.6

21.4

Temp at a depth (80 cm)

17844

6.483

6.919

-6.8

45.4

Temp at a depth (120 cm)

17896

6.510

5.764

-3.7

17.1

Temp at a depth (160 cm)

17802

6.607

4.982

-1.8

15.8

Temp at a depth (240 cm)

17865

6.716

3.776

-8.9

14.3

Landslide

27119

0.001

0.035

0

1

Daily rainfall

26974

2.278

8.313

0.0

243.5

Cumulative precipitation

27119

368.967

334.201

0.0

1272.1

Antecedent rainfall

27119

5.978

20.362

0.0

335.3

Data user for logistic regression

Min air day temp

199

13.664

5.283

-6.6

21.8

Avg air day temp

199

15.542

4.866

-4.8

22.8

Max air day temp

199

17.982

4.880

-3.0

26.7

Temp at a depth (20 cm)

113

15.664

4.628

-4.8

22.3

Temp at a depth (40 cm)

113

15.301

4.512

-4.5

20.7

Temp at a depth (80 cm)

129

14.038

4.134

-1.3

18.4

Temp at a depth (120 cm)

129

12.667

3.858

-1.0

17.1

Temp at a depth (160 cm)

128

11.721

3.544

-0.3

15.7

Temp at a depth (240 cm)

129

10.058

3.049

0.7

14.3

Landslide

200

0.170

0.377

0

1

Daily rainfall

200

71.221

28.606

45.7

243.5

Cumulative precipitation

200

481.522

232.776

0.0

1168.3

Antecedent rainfall

200

23.144

38.211

0.0

200.8

Логистическая регрессия

Итак, мы добрались до главного. Тут как то надо обосновывать почему именно логистическая регрессия. Целью исследования было построить некую модель для предсказаний оползневых случаев по метеоданным. Вместе с этим, мы хотели посмотреть как сильно влияют на оползни те или иные переменные. То есть нам важна значимость коэффициентов с оценкой (машинное обучение отменяется). И здесь, кроме logit есть ещё probit. Выбор между этими инструментами — это дело вкуса, если хотите. В геофизике как то принято использовать logit. Кроме этого, logit можно всегда интерпретировать как соотношение шансов, в общем, он теплее.

Запишем отношение шансов формально:

Логистическая регрессия для оползневых случаев. DR, AR, CP - наши Логистическая регрессия для оползневых случаев. DR, AR, CP — наши «осадочные» переменные. Бетты — коэффициенты регрессии.

В этой формуле нет температурных осадков. Мы их убрали выполнив линейную регрессию по всем переменным из за низкой статистической значимости. То есть p-значение для двустороннего T-теста больше 10% для каждой температурной переменной. Построить регрессию по всем переменным и убедится в этом можно на основе этого скрипта. Кстати, мы использовали statsmodels. А любителям R рекомендую вот эту статью)

Теперь нам нужно обсудить очень важный момент. Если мы посмотрим на сводную статистику (табличка выше, блок вся дата), то увидим, что оползневых «дней» всего 33 из 27119 (строка Landslide). Кроме того, что данные жутко несбалансированы, это может привести к проблеме quasi-complete separation (варианты перевода приветствуются). Подробно эта проблема описана в работе статистов Albert & Anderson в 1984 году. Интуитивно, выполняя оптимизацию целевой функции, модель нам прочертит границу по 54 мм, которую мы и так видим на рисунке с оползневыми случаями. Но нам, конечно, надо точнее. Нужно знать, если за день выпало больше 54 мм, то какая вероятность того что оползни будут в городской черте. Для этого, мы просто отрежем данные ниже 54 мм (таблица выше, блок данные для регрессии).

Запишем этот ход конем формально:

Отрезали данные ниже порогового значенияОтрезали данные ниже порогового значения

где

Пороговое значение это 54мм ± стандартное отклонение в суточных вариациях осадковПороговое значение это 54 мм ± стандартное отклонение в суточных вариациях осадков

Теперь давайте посчитаем наши коэффициенты:

Dependent variable: Landslide

Coefficients

Marginal effects

Intercept

-7.009*** (1.038)

-

Antecedent rainfall

0.013*** (0.005)

0.0012*** (<0.001)

Cumulative precipitation

0.002** (0.001)

0.0002** (<0.001)

Daily rainfall

0.048*** (0.009)

0.0044*** (0.001)

Observations

200

LLR p-value

<0.001***

Note:

**p<0.05; ***p<0.01

Здесь мы видим, что, во первых статистическая значимость теста максимального правдоподобия в норме, т.е. больше 95% для всех переменных. А во вторых интересна оценка «вклада» каждого осадочного параметра в прогнозируемое значение возникновения оползня. В случае линейной регрессии, мы можем просто посмотреть на сами параметры, какой больше тот и круче. В случае logit мы должны продифференцировать относительно каждого коэффициента и получить так называемые маржинальные значения (marginal effects). И на первом месте, по влиянию на вероятность оползня, у нас дневные осадки. Следом, на порядок ниже, идут предшествующие осадки. И самый слабый (но значимый!) — это накопленные осадки с начала года.

Круто! Один результат есть. Но нам ещё нужна предиктивная модель. Для этого нам нужно определить порог срабатывания нашей logit (P) модели. По умолчанию, для logit всё что больше 0.5 и есть кейс. Но мы можем немного поварьировать этот порог и посмотреть на значение наших метрик:

Сбалансированная точность, потому что всего 33 позитивных случая из 200Сбалансированная точность, потому что всего 33 позитивных случая из 200image-loader.svgimage-loader.svg

Наши друзья precision и recall. Достаточно распространённые метрики в классификации. Интуитивно, precision это сколько оползней мы вообще правильно обнаружили, а recall это сколько «пропусков» для положительных вариантов. TP — это правильно предсказанный случай, FP — неправильно, FN — неправильно не предсказанный.

F1 оценка всё учитывает. Будем ориентироваться на неё.F1 оценка всё учитывает. Будем ориентироваться на неё.

Ну и scikit learn нам в помощь:

Значение метрик оценки для классификации оползней при разных порогах (predicted threshold)Значение метрик оценки для классификации оползней при разных порогах (predicted threshold)

Методом перебора по всем 33 случаям мы определили оптимальный порог в 0.24 на наших данных. Здесь надо сказать, что мы не делили данные для раздельного обучения и валидации, так как их очень мало.

Матрица несоответствий при классификации оползней на обучающей выборке моделью Logit (P) (200 samples, 0.24 predicted threshold):

Observed

Not a landslide

152 (TN Landslide, TP Not a landslide)

14 (FP Landslide, FN Not a landslide)

Landslide

13 (FN Landslide, FP Not a landslide)

21 (TP Landslide, TN Not a landslide)

Not a landslide

Landslide

Predicted

Производительность модели Logit (P) как классификатора оползневых случаев по обучающей выборке метеоданных (200 samples, 0.24 predicted threshold)

Precision

Recall

F1-score

Support

Not a landslide

0.93

0.92

0.92

166

Landslide

0.61

0.65

0.63

34

Balanced accuracy

0.78

200

Ну и, наконец, давайте упростим нашу формулу, что бы вот подставил значения осадков и получил вероятность, потом посмотрел больше ли оно 0.24 и предсказал!

Финальная предиктивная модель оползней на основе данных об осадкахФинальная предиктивная модель оползней на основе данных об осадках

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

© Habrahabr.ru