{"id":13528738,"url":"https://github.com/ragulpr/wtte-rnn","last_synced_at":"2025-05-16T06:06:10.583Z","repository":{"id":62589714,"uuid":"80128897","full_name":"ragulpr/wtte-rnn","owner":"ragulpr","description":"WTTE-RNN a framework for churn and time to event prediction","archived":false,"fork":false,"pushed_at":"2020-08-07T06:00:31.000Z","size":9549,"stargazers_count":772,"open_issues_count":37,"forks_count":189,"subscribers_count":42,"default_branch":"master","last_synced_at":"2025-05-12T07:23:54.282Z","etag":null,"topics":["churn-prediction","failure-rate","keras","machine-learning-algorithms","neural-network","rnn","tensorflow","weibull"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ragulpr.png","metadata":{"files":{"readme":"README.ko.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-01-26T15:51:17.000Z","updated_at":"2025-04-22T07:55:07.000Z","dependencies_parsed_at":"2022-11-03T17:02:01.494Z","dependency_job_id":null,"html_url":"https://github.com/ragulpr/wtte-rnn","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragulpr%2Fwtte-rnn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragulpr%2Fwtte-rnn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragulpr%2Fwtte-rnn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragulpr%2Fwtte-rnn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ragulpr","download_url":"https://codeload.github.com/ragulpr/wtte-rnn/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478189,"owners_count":22077676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["churn-prediction","failure-rate","keras","machine-learning-algorithms","neural-network","rnn","tensorflow","weibull"],"created_at":"2024-08-01T07:00:23.585Z","updated_at":"2025-05-16T06:06:05.573Z","avatar_url":"https://github.com/ragulpr.png","language":"Python","readme":"# WTTE-RNN\n\n[![Build Status](https://travis-ci.org/ragulpr/wtte-rnn.svg?branch=master)](https://travis-ci.org/ragulpr/wtte-rnn)\n\n베이불 시간-이벤트 순환 신경망 (Weibull Time To Event Recurrent Neural Network)\n\n이벤트 발생 및 시간 예측에 대한 덜 어려운 기계 학습 프레임워크입니다.\n\n서버 모니터링부터 지진 발생 및 생산량 예측 등의 다양한 문제는 크게 보면 이벤트가 발생하는 시간을 예측하는 문제입니다.\nWTTE-RNN은 이러한 문제가 어떻게 다루어져야 하는가에 대한 알고리즘입니다.\n\n\n* [블로그 글(영어)](https://ragulpr.github.io/2016/12/22/WTTE-RNN-Hackless-churn-modeling/)\n* [석사 논문](https://ragulpr.github.io/assets/draft_master_thesis_martinsson_egil_wtte_rnn_2016.pdf)\n* [모델](https://imgur.com/a/HX4KQ) 에 대한 빠른 시각적 소개\n* Jupyter notebook: [간단](examples/keras/simple_example.ipynb), [모든 과정 포함](examples/data_pipeline/data_pipeline.ipynb )\n\n\n# 설치\n\n## Python\n\n[파이썬 패키지를 위한 README](python/README.md)를 확인하세요.\n\n필요없는 내용이 너무 많다고 생각하신다면, 기본적인 구현은 [jupyter notebook](examples/keras/standalone_simple_example.ipynb) 의 각 줄에서 확인하실 수 있습니다.\n\n# 아이디어 및 기본 개념\n\n많은 이벤트로 구성된 시계열 데이터를 갖고 있고, 과거의 데이터를 이용하여 다음 이벤트가 발생하는 시간 (TTE, time to the next event)을 예측하고 싶다고 가정해 봅시다. 아직 마지막 이벤트를 관측하지 않았다면 우리는 훈련 할 수 있는 TTE의 최소 경계선까지만 알고 있는 것입니다. 이것을 중도절단된 데이터 (*censored data*)라고 합니다. (빨간색으로 표시했습니다):\n\n![중도절단된 데이터](./readme_figs/data.gif)\n\n일종의 트릭으로, TTE 자체를 예측하는 대신 기계 학습 모델이 *확률 분포의 매개 변수* 를 출력하도록 해 봅시다. 어떤 확률 분포도 가능합니다만, 그 [굉장함](https://ragulpr.github.io/2016/12/22/WTTE-RNN-Hackless-churn-modeling/#embrace-the-Weibull-euphoria) 을 좋아해서 *Weibull 분포* 를 사용했습니다. 기계 학습 알고리즘 또한 그래디언트 기반의 임의의 알고리즘이 될 수 있습니다만, 우리가 그 [굉장함](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)을 좋아해서 RNN을 선택했습니다.\n\n\n![WTTE-RNN 구조 예제](./readme_figs/fig_rnn_weibull.png)\n\n다음 단계는 중도절단된 데이터에도 적용할 수 있는 특수한 log-loss 알고리즘을 선택해 훈련시키는 것입니다. 그 배경이 되는 직관은, *다음* 에 발생할 이벤트 시점에 높은 확률을 할당하거나, (중도절단된 데이터의 경우) 이벤트가 발생하지 *않을* 시점에 낮은 확률을 할당하고 싶다는 것입니다.\n\n![시간축에 따른 WTTE-RNN 예측](./readme_figs/solution_beta_2.gif)\n\n그 결과로 우리는 각 단계에서 *TTE의 분포* 에 대한 꽤 깔끔한 예측을 얻습니다 (아래는 단일 이벤트에 대한 것입니다):\n\n![WTTE-RNN prediction](./readme_figs/it_61786_pmf_151.png)\n\n다른 재미있는 결과는, 예측된 매개 변수들이 이벤트 *얼마나 빨리* (알파, alpha) 일어나고, *얼마나 확실하게* (베타, beta) 일어날 지에 대한 예측을 시각화하고 그룹화하는 데 사용할 수 있는 2차원 임베딩이라는 것입니다. 예측한 알파 (왼쪽)와 베타 (오른쪽)의 시간축을 쌓으면 다음과 같습니다.\n\n![WTTE-RNN alphabeta.png](./readme_figs/alphabeta.png)\n\n\n## 주의할 점\n\n특정 상황에서 아래의 멋진 손실 함수를 사용해도 되는 여러 수학 이론들이 있습니다.\n\n![loss-equation](./readme_figs/equation.png)\n\n따라서 중도 절단 된 데이터의 경우 절단된 시점을 넘은 시점에 대해서는 분포를 상향하는 쪽으로만 보상합니다. 제대로 된 결과를 얻으려면 특징(feature) 데이터에 절단 메커니즘에 의한 결과가 반영되지 않고 완전히 독립적이어야 합니다. 특징(feature)이 절단 시점을 포함한 정보를 담고 있다면, 알고리즘은 TTE 대신 절단 확률에 기반하여 예측하는 식으로 훈련될 것입니다. 이 경우 오버피팅/아티팩트 학습이 일어납니다. 전역 특징(global feature)은 잘 다루지 않으면 이런 효과를 나타낼 수 있습니다.\n\n# 상태 및 로드맵\n\n이 프로젝트는 개발중인 프로젝트입니다. 쉽게 포크하고 설치할 수 있는 모델 프레임워크를 목표로 하고 있습니다. WTTE-RNN은 알고리즘이고, churn_watch는 생산 모니터링 및 보고가 어떻게 아름답고 쉽게 이루어질 수 있는지에 대한 독창적인 아이디어로 구현중인 배포판입니다. pull-request, 추천, 의견 및 기고를 매우 환영합니다.\n\n# 저장소 내용\n\n* 변환기\n    * 데이터 파이프라인 변환들 (pandas `DataFrame` of expected format to numpy)\n    * 시간-이벤트 및 절단점 계산들\n* Weibull 함수들(cdf,pdf,quantile,mean 등)\n* 프레임워크 용으로 작성된 목적함수들\n    * tensorflow\n    * keras\n* 신경층\n    * Keras로 구현한 Weibull 출력층\n\n\n## 멀티 프레임워크 지원\n\n핵심 기술은 목적함수들입니다. 우린 이 목적함수들을 다양한 기계학습 프레임워크용으로 재사용할 수 있게 만드는 것을 목표로 하고 있습니다.\n\n  * TensorFlow ✔\n  * Keras (TensorFlow wrapper) ✔\n  * MXnet\n  * Theano\n  * Torch\n  * h2o\n  * scikitFlow\n  * MLlib\n\n## 모델 입력 및 출력\n\n모델을 사용하기 위해서는 원시 데이터를 tte용으로 변환해야 합니다. 모델 훈련을 위해서는 최종 출력을 위해 Weibull 함수들이 필요합니다.\n\n  * SQL, R, Python으로 작성된 도움 함수들.\n\n## 모니터링\n\nWTTE-RNN은 기계학습 알고리즘인 동시에 데이터의 형태, 속성 및 예측에 대해 논의할 수 있는 시각 언어이기도 합니다.\n\n  * 플롯 (일부가 마무리됨)\n  * 멋짓 웹앱 또는 그 비슷한 것 (다른 곳에서 일부 마무리)\n  * 알림기능 (e.g.,Slack/e-mail 봇 \u0026 요약)\n  * API\n\n# 라이선스\n\n  * MIT license\n\n## Citation\n\n```\n@MastersThesis{martinsson:Thesis:2016,\n    author = {Egil Martinsson},\n    title  = {{WTTE-RNN : Weibull Time To Event Recurrent Neural Network}},\n    school = {Chalmers University Of Technology},\n    year   = {2016},\n}\n```\n\n## 기여\n\n질문은 egil.martinsson[at]gmail.com 으로 보내주세요.\n가능하면 다른 사람들도 도울 수 있도록 이슈를 열어주세요.\n기여/PR/댓글 및 기타 등등 모두 환영합니다!\n","funding_links":[],"categories":["Examples or singular models","💻 Repos with Models","Python"],"sub_categories":["Managed database services"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragulpr%2Fwtte-rnn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fragulpr%2Fwtte-rnn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragulpr%2Fwtte-rnn/lists"}