/hackathon_karma

h.karma.red hack proj

Primary LanguageJupyter NotebookMIT LicenseMIT

Хакатон karma.red (https://h.karma.red)

#0010 НЕагрегатор лучших телешоу 2018 года

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

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

Но это не точно — может быть предложен свой вариант.


Т.к. хакатон проводит компания karma, специализирующая на p2p кредитовании, то возьмем именно эту предметную область вместо никому не нужных сериальчиков ("Песнь льда и пламени" нужно именно читать 😉)

Как в этой области представить плюшки разработчикам? А давайте сделаем их экспертами!

Для этого организуем следующую систему (в рамках хакатона в виде смарт-контракта в сети ethereum):

  • пользователи могут подавать заявки на кредит
  • эксперты могут проанализировать заемщика (ML, поиск доп информации в интернете (перекликается с #0101)) и, если они уверены, что заемщик кредит отдаст, они вносят в смарт контракт некоторое количество средств в качестве гарантии, что этот заем будет выплачен (чем больше уверенность, тем больше вносят)
  • кредиторы, видя, что эксперты вносят средства в качестве гарантии, понимают, что к этому заемщику есть определенное доверие и часть их рисков будет покрыта, более охотно выдают займы.
    • по экспертам доступна статистика успешных/неуспешных гарантий, благодаря этому кредитор может принимать более взвешанные решения (в рамках хакатона не реализовано)
  • После окончания срока кредита:
    • если кредит погашен, часть процентов (пропорционально гарантийному взносу от эксперта) идут эксперту
    • если кредит не выплачен, часть гарантийного взноса идет кредитору (пропорционально гарантийным взносам и сумме кредита с процентами)

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


В рамках хакатона реалиовано

Смарт контракт для выдачи займов

contracts/Loans.sol

Пользователи могут взять кредит на некоторое количество дней. За каждый день заемщик должен вернуть 10% от суммы кредита.

  • requestLoan - запросить кредит

  • supportLoan - эксперты, могут внести гарантию, что кредит будет возвращен.

    • В случае возврата проценты от кредита делятся следующим образом:
      • кредитору: проценты * (сумма кредита / (сумма кредита + сумма гарантии))
      • эксперту: проценты * (сумма гарантии / (сумма кредита + сумма гарантии))
    • В случае невозврата кредутору будет перечислена часть суммы из гарантии:
      • кредитору: сумма гарантии * (сумма гарантии / (сумма кредита + сумма гарантии))
      • эксперту: сумма гарантии * (сумма кредита / (сумма кредита + сумма гарантии))
    • таким образом, чем больше эксперт уверен в возврате кредита, тем большую сумму он может внести в гарантийный фонд, и тем больше он получит из выплаченных %. Но и тем больше ему придется вернуть кредитору, в случае невыплаты кредита
  • acceptRequest - кредитор принимает заявку, средства перечисляются заемщику

  • payOffLoan - выплата кредита. Проценты распределяются по формуле выше

  • reportOverdueLoan - кредитор сообщает, что кредит не выплачен вовремя, гарантийный фонд распределяется по формуле выше.

Простая модель для предсказания "хорошести" заемщика

models/work.ipynb

Использованы несколько простых фич (количество займов, средний займ, средний срок, количество успешных займов) В рамках хакатона не использовалась кроссвалидаия, ансамбли и тд, использован xgboost со стандартными настройками. (Не могу не поделиться ссылкой https://github.com/quantum13/qml)

Скрипт для скоринга

/data/cloud/projects/2018/hack/hackathon_karma/scoring/score.py

На основе обученной модели выдает предсказание хорошести клента. На вход рпинимает историю кредитов

Скрипт для моделирования

emulators/debtors.js

Для простоты моделирования контракт деплоится в эмулятор блокченйа эфира (ganache-cli)

В течение некоторого времени 200 кредиторов постоянно подают каждый со своей стратегией. Позже, на основе этой же стратегии они выплачивают или не выплачивают кредит.

40 экспертов могут внести гарантию за кредит. 39 из них принимают решение бросив монетку. 1 на основе обученной модели. Несколько кредиторов всегда принимают заявки на кредиты.

Пример вывода моделирования

Round: 1000/1000
Issued:         loans:  3553    Tokens: 1339469 Unique debtors: 193
Returned:       loans:  1983    Tokens: 409326

Experts (success supports/supported) (success supports tokens/supported tokens)
scoring#210:( 25/ 27) ( 3116/ 3526)
random#211:( 27/ 49) ( 2167/ 6813)              random#212:( 22/ 38) ( 2709/ 6684)              random#213:( 31/ 50) ( 3641/ 9864)              random#214:( 29/ 48) ( 2212/ 6895)
random#215:( 25/ 49) ( 4064/12983)              random#216:( 22/ 42) ( 2078/ 8013)              random#217:( 29/ 46) ( 4091/11355)              random#218:( 27/ 43) ( 2077/ 6735)
random#219:( 28/ 43) ( 3354/ 7615)              random#220:( 18/ 41) ( 2213/ 7962)              random#221:( 20/ 46) ( 1487/ 8968)              random#222:( 19/ 36) ( 1422/ 7071)
random#223:( 24/ 39) ( 2477/ 8992)              random#224:( 28/ 43) ( 1902/ 7135)              random#225:( 31/ 49) ( 2731/ 8939)              random#226:( 21/ 39) ( 2828/ 9495)
random#227:( 20/ 39) ( 1589/ 6254)              random#228:( 31/ 47) ( 3498/ 7234)              random#229:( 29/ 45) ( 3408/ 8358)              random#230:( 27/ 50) ( 1668/ 8417)
random#231:( 28/ 52) ( 2707/11737)              random#232:( 32/ 45) ( 3060/10086)              random#233:( 28/ 44) ( 2608/ 8114)              random#234:( 24/ 40) ( 2032/ 5279)
random#235:( 22/ 46) ( 2015/10927)              random#236:( 27/ 42) ( 2585/ 6595)              random#237:( 27/ 39) ( 3033/ 7265)              random#238:( 17/ 39) ( 2729/10597)
random#239:( 22/ 40) ( 1893/ 9913)              random#240:( 26/ 48) ( 2678/10075)              random#241:( 19/ 48) ( 1969/ 9122)              random#242:( 27/ 52) ( 5184/15220)
random#243:( 20/ 50) ( 2209/14179)              random#244:( 17/ 38) (  858/ 8103)              random#245:( 19/ 46) ( 1439/ 9031)              random#246:( 23/ 41) ( 1019/ 4092)
random#247:( 31/ 47) ( 3336/ 5854)              random#248:( 17/ 31) ( 1728/ 4984)              random#249:( 22/ 49) ( 1755/10259)

Result experts balances (initial balance was 1000000)
scoring#210:1000034
random#211:998720               random#212:998879               random#213:997990               random#214:998482
random#215:996776               random#216:997811               random#217:997161               random#218:998409
random#219:998678               random#220:998079               random#221:997121               random#222:998029
random#223:997389               random#224:998233               random#225:997665               random#226:997469
random#227:998327               random#228:999018               random#229:998556               random#230:997605
random#231:996811               random#232:997573               random#233:998186               random#234:998947
random#235:996849               random#236:998790               random#237:998716               random#238:997125
random#239:997186               random#240:997627               random#241:997557               random#242:996883
random#243:995290               random#244:997331               random#245:997094               random#246:999111
random#247:999374               random#248:998772               random#249:996771

Тут видно, что эксперт, действующий на основе скоринга вподдержал 27 заявок, 25 из них успешно.

После моделирования он заработал 34 токена, хотя все остальные эксперты оказались в минусе

Запуск скрипта для моделирования
git clone https://github.com/quantum13/hackathon_karma.git
cd hackathon_karma/contracts/
npm install
sudo pip3 install -r ../models/requirements.txt


Запустить эмулятор блокчейна эфира в отдельном терминале из каталога hackathon_karma/contracts/ или в фоновом режиме
./node_modules/.bin/ganache-cli -a 300 -g 0

Запустить в первой вкладке
./node_modules/.bin/truffle compile && ./node_modules/.bin/truffle exec emulators/debtors.js