Хакатон karma.red (https://h.karma.red)
Предположение: Не криптой единой! Сегодня любой 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