Модель финансового заражения (распространения эпидемии) встречает проблему - PullRequest
1 голос
/ 10 июля 2019

Недавно я хочу перестроить модель финансового заражения в статье: Заражение в финансовых сетях Прасанны Гай.Теперь я застрял на первом рисунке:

first figure (на самом деле рисунок 3).

Что я сделал

Я использовал Python и networkx.

  • Сначала создайте сеть ER с 1000 узлами, и вероятность зависит от того, какую среднюю степень я хочу смоделировать.Например, если я хочу смоделировать среднюю степень в 3, то вероятность генерирования сети ER равна 3 / (1000-1), где 1000 - размер сети.

  • Тогда длякаждый узел, я нахожу, сколько узлов указывают на него и подсчитывают, чтобы вычислить AiIB (веса).Если узел 1 имеет 3 узла, указывающих на него, то веса на этих ребрах равны AiIB (0,2 на бумаге) / 3 (количество соседей).

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

  • Поскольку заражение определяется как более 5% банков, обанкротившихся в этой сети (в данном случае 50).

  • Для построения графикаНа рисунке каждую среднюю степень необходимо проверить 100 раз:

    • вероятность = число случаев заражения / 100 раз моделирования здесь

    • степень = [подслучай произошедшего заражения] сумма доли обанкротившихся банков / число зараженных случаев.

Необработанный код доступен на GitHub ,Запустив er_100.py, вы можете получить мою фигуру следующим образом:

figure 2

Если у вас возникли проблемы с кодом, пожалуйста, дайте мне знать.(для запуска кода на GCP с 8 vCPU требуется не менее 1 часа ...)

Я также попробовал сеть с 60 узлами, вот как это выглядит: 60 nodes

itимеет немного похожую форму с рисунком 1. Но это все еще не хорошо, и небольшая сеть не то, что я хочу.

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

Если у вас есть идеи, пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 11 июля 2019

Это "сложный" вопрос, на который нужно ответить.

Я до сих пор не нахожу никакой подсказки к коду.Затем я переписываю код на R и запускаю его, вот чертёж, который я получил:

raw figure

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

Возможно, это тот случай, когда Python просто не можетделать .Если кому-то интересен этот вопрос, вы хотите больше разделить разницу между Python и R, это отличный пример.И я очень рад предложить любую помощь.

Кстати, код модели в R доступен в GitHub , и он все еще находится в процессе обновления.

Для тех, кто потратилвремя для прочтения моего описания, спасибо за ваше время.

обновление:

Я также не могу поверить в это, потому что, на мой взгляд, код делает подсчет и вычисляет, что это просто.Я распечатываю очень вещи на каждом шагу и проверяю каждый узел, от 10 узлов небольшой сети до 1000 узлов сети, размер файла журнала превысил 50G.Все выглядит нормально и число (банкрот один) просто не достигает порога.Не так, как в R, с абсолютно такой же структурой, результаты просто с бумагой same.

Я действительно не знаю почему и понятия не имею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...