Wednesday, April 29, 2020

(Zoom) Zoom에 추가하고 싶은 기능들

이번 post에서는 제가 Zoom을 사용하면서 추가했으면 좋았을 거라고 생각하는 기능들에 대해서 말해보도록 하겠습니다.

1. Zoom 회의 이후에 해당 회의에 있던 멤버들의 연락처를 추천해주는 기능

지금 현재 Zoom을 통해서 회의를 한다면 일회성으로 모이고 다시 사라지도록 설계되어 있습니다. 그래서 만약에 팀 프로젝트 과제를 한다면은 조원들의 연락처를 따로 찾아봐야 하는데, 이러한 기능이 있다면은 팀 프로젝트는 훨씬 수월해질 겁니다. 또한, 이러한 기능을 통해서 채팅 기능도 더욱 활발히 사용될 수 있어 Zoom의 활용도도 엄청 올라갈 것 같습니다.

2. 예약된 회의 직전에 알람 기능 및 자동 참가 기능

수업이나 회의를 Zoom과 다른 플랫폼(예를 들어, YouTube live나 LMS)과 섞여서 사용하다보면, 가끔씩 오늘 Zoom을 활용한 수업이나 회의가 있는지를 깜빡할 때가 있습니다. 그래서 미리 예약을 해두면 저 수업이나 회의 관련해서 몇 분전에 알람을 울리거나 시작하면 자동으로 참가할 수 있도록 pop-up창이 떠오르게 하는 걸 생각해보았습니다.

3. Zoom의 기본적인 사용법에 관련된 튜토리얼 기능 제공

이번 코로나 바이러스로 인해서 Zoom을 새로 사용하는 유저들이 많이 늘어났습니다. 그러다 보니 컴퓨터를 잘 다루지 못 하는 사람들은 Zoom을 다루기 어려울 수 있는데 일단 화상회의라는 환경이 낯설수도 있고 처음 들어가면 Zoom에 대한 사용법은 일일이 찾아봐야하기 때문입니다. (구글 같은데 보시면 Zoom을 처음 사용하니 생기는 해프닝들을 어렵지 않게 찾으실 수 있습니다. 저희 학교도 해프닝들이 좀 있었고요!) 그래서 저는 Zoom이 만약 적어도 최소한의 사용법 정도는 숙지할 수 있도록 튜토리얼 기능을 제공한다면 좋겠다고 생각합니다.

이상 제가 생각해본 아이디어들이었습니다!

(Zoom) Zoom에 대한 내가 생각하는 개선안

지난 post에서 제가 Zoom의 문제점들에 대해서 서술했습니다. 
그래서 이번 post에서는 제가 생각해낸 개선안들에 대해서 말씀드리려고 합니다.

1. End-to-End encryption 미지원

개선안: 너무 명확합니다. End-to-end encryption을 이제라도 지원하는 것입니다. 그리고 이를 지원한다는 것을 공개적으로 투명하게 증명해서 저 큰 실수를 만회하는 것입니다.

이 부분에 대해서는 회사의 잘못이 분명하고 이미 깨진 신뢰는 다시 회복하기에는 어려우나 지금이라도 개선하는게 옳다고 저는 생각합니다. 그래야 적어도 현재 사용하고 있는 유저들을 붙잡을 수 있으며 여러 기업에서 다시 채택할 수 있다고 생각합니다.

2. Zoom Bombing

개선안: 들어올 수 있는 User ID들을 지정해서 해당 유저들만 들어올 수 있도록 기능을 제공하거나 참가시에 비밀번호를 입력해야 참여할 수 있도록 설계하는게 방법인 것 같습니다. 

그리고 사실 Zoom 회의에서 호스트가 해결하는 방법도 있는데 버튼들을 이러한 순서로 누르면 해결할 수 있습니다.
 '참가자 관리'  -> '...' -> '회의 잠금'
이러한 버튼들을 순서대로 누르면 더 이상 누구도 회의에 더 들어올 수 없다던데 이 기능도 사용하면 좋을 것 같습니다.

< Zoom 회의 잠금 버튼 >

3. 채팅기록이 저장되지 않는 것

개선안: 채팅창을 영상 화면과 같이 일체화 시키도록 다시 설계하면 될 것 같습니다. 아니면 채팅을 하면 영상화면에서 특수효과처럼 채팅 내용을 작게나마 나타낼 수 있으면 좋지 않았을 까 싶습니다. 

아니면 영상을 저장할때에 자막파일이나 로그로만 따로 저장하는 것도 방법일 것 같습니다.

이상 제가 생각해낸 개선안들입니다. 다음에는 제가 Zoom에 더 추가하고자 하는 아이디어들에 대해서 나누도록 하겠습니다.

(Zoom) Zoom을 사용하면서 느낀 문제점들


올해 많은 대학교들이 한 학기를 전면 온라인 강의로 전환하면서 Zoom을 많이 사용하게 되었고 Zoom과 관련해서 문제점들도 많이 떠올랐습니다. 저도 이번에 Zoom을 사용하면서 몇몇 문제들은 좀 심각하다고 느꼈는데요. 그래서 이번 post에서는 제가 느낀 문제점들을 말해보려고 합니다.

1. End-to-End encryption 미지원

이 문제가 제일 큰 문제인데, 여러 회사나 국가에서 사용 금지된 이유이기도 합니다. Zoom은 end-to-end encryption를 지원한다고 했지만 실제로는 지원하지 않는다고 합니다.

참고: 보통적인 encryption은 user와 server만 서로 message를 알아볼 수 있도록 message를 암호화 시키고 이를 user와 web-site만 해독할 수 있도록 만드는 것입니다. 그러면 중간에 message를 가로채도 암호화 되어 있어서 해독할 수 없는건데 이런 방법을 HTTPS encryption이라고 합니다. 
end-to-end encryption은 server도 암호를 해독할 수 없고 user들 끼리만 message를 공유할 수 있는 방법입니다. 

 그래서 Zoom을 사용해서 주고받은 메세지들은 전부 Zoom 회사도 알아볼 수 있었다는 의미었으므로 보안에 문제가 있었습니다.
<Zoom End-to-End Encryption을 지원 안 한다는 기사>

2. Zoom Bombing

Zoom Bombing 같은 경우는 제 3의 유저가 Zoom의 회의 링크를 알아내어 들어와서 말썽을 일으키는 문제입니다.

쉽게 예를 들어보겠습니다. 저희 학교의 몇몇 수업에서는 시험 때 Zoom을 시험 시간동안 켜놓고 해서 부정행위를 방지하게 합시다. 그렇지만 만약에 타 학교 학생이 저 링크를 알았다고 생각합시다. 그러면 저 학생은 저 수업과는 아에 무관하지만 들어올 수 있고 시험시간에 노래를 틀어버리거나 수업에 방해되는 영상을 틀어버릴 수도 있습니다. 저런 테러행위가 바로 Zoom bombing입니다.

그래서 실제로 제 3자가 들어와서 화면 공유 기능으로 포르노 영상이나 수업에 방해되는 영상을 틀어버리는 경우도 있다고 합니다. 또한, Deep web에서는 Zoom bombing을 할 수 있는 링크를 캐어오는 사이트도 존재한다고도 합니다.


<Zoom Bombing 예시>

3. 채팅기록이 저장되지 않는 것

줌으로 회의를 할때에 이를 호스트가 녹화할 수 있는 기능이 있습니다. 그 기능에서 제가 개인적으로 느낀 문제점인데, 화면만 녹화가 되고 채팅창은 분리되어 있어서 질문을 채팅으로 할때에 교수님이 직접 질문을 다시 읽어주시고 답변을 해주셔야 생기는 문제가 발생합니다.


<Zoom 화면 녹화 기능>

제가 찾아본 문제점들은 다음과 같았고 다음 post에서는 이러한 문제점들에 대한 제가 생각해본 방안들에 대해서 설명할 예정입니다.

참고자료
https://www.youtube.com/watch?v=cjY7_StY6Gs
https://7news.com.au/sport/olympics/scottish-swimmings-zoom-session-bombed-with-disturbing-x-rated-footage-c-977330
https://theintercept.com/2020/03/31/zoom-meeting-encryption/
https://namu.wiki/w/ZOOM(%ED%94%8C%EB%9E%AB%ED%8F%BC)#s-3
https://www.videosolo.com/images/resources/zoom-record.jpg

Sunday, March 29, 2020

(Zoom) Skype과 비교해보자!

지난 post에서는 Zoom만의 특징에 대해서 알아보았습니다.

그런데, Zoom과 비슷한 프로그램으로 Skype이 존재합니다. 그러면 Skype와 Zoom을 비교해보아 어떤게 더 좋을지 한번 생각해서 더 좋은 것을 택하는게 제일 합리적이겠죠? 그래서 이번 post에서는 Zoom과 아주 비슷한 Skype과 네 가지 측면에서 비교를 해 볼 예정입니다.

첫 번째로 비교해 볼 측면은 이용자 측면에서 한번 해보도록 하겠습니다. 
일단, Google Play Store에서 2020년 3월 30일을 기준으로 비교해보자면 각각 이렇습니다.

 그리고 Capterra에서 2020년 3월 30일 기준으로 비교해보자면 각각 이렇습니다.
  • Zoom:
    • 평점: 4.6/5 (전체: 4168명)
    • 편의성: 4.5/5
      • "The biggest thing with video conferencing tools is the quality and ease to use and Zoom is at the top of both of those in our eyes. We highly recommend Zoom for our video conferencing tool."
  • Skype:
    • 평점: 4.3/5 (전체: 9805명)
    • 편의성: 4.4/5
      • "It is very straightforward forward and easy to use. Not only is the instant messaging feature wonderful, but the ability to have group meetings and presentations is great."
 마지막으로 저도 둘 다 사용해보았으므로 첨언을 하자면 아래와 같습니다.
  • Zoom: 
    • 여러 유저가 카메라를 키고 수업을 들었을 때에 비교적 다 같이 보기가 편한점이 아주 좋았습니다. 특히나 UI가 발표자의 얼굴만 보던가, 여러명을 한 번에 보던가, 유저들의 얼굴들을 bar에서 몇 명씩만 볼 수 있도록 지원한다는 점이 진짜 좋았습니다.
    • Screen-sharing 시에 특정 창만 지정해서 screen을 공유할 수 있다는 점이 저도 좋았습니다. 불필요한 창들까지 share할 필요가 없어서 발표시에 미리 창들을 준비할 필요가 없고 남의 사생활을 볼 가능성이 줄어들어 좋았습니다.
  • Skype:
    • 카메라에서 얼굴 부분만 제외하고 나머지 부분을 blur 처리를 지원해주는게 전 좋았습니다.
    • 굳이 Premium을 안 사더라도 시간 제약이 없다는 점에서도 좋은 것 같습니다.
    • Zoom에 비교하면 압도적으로 유저들이 많다는 점도 장점이 되겠습니다.
두 번째로는 UI 측면에서 살펴보도록 하겠습니다.
  • Zoom
    • 시작화면



    • 화상통화 화면
  • Skype

    • 시작화면 (Messenger) 
    • 화상통화 화면
세 번째로는 개발자 측면에서 이를 살펴보도록 하겠습니다.
Capterra에 나와있는 정보와 제 경험을 같이 참고해서 주요 기능적인 면들은 아래와 같습니다. (Capterra에 나와있는건 생각보다 outdated 되었더라구요...)

  • Zoom
    • Annotations / Drawing Tools
    • Desktop / Browser Sharing
    • Mobile Screen Sharing
    • Screen Recording
    • Targeted / Locked Screen Sharing
    • Messenger
  • Skype
    • Desktop / Browser Sharing
    • Screen Recording
    • Targeted Face Camera
    • Messenger
그리고 두 프로그램이 설치될 수 있는 platform을 비교하자면 전부 다 아래에 platform에 설치가 가능합니다.
  • Windows
  • Mac
  • Cloud
  • IOS
  • Android
  • Linux // Zoom 같은 경우는 command-line을 사용해야합니다.

마지막으로, 경영자 측면으로 비교해보겠습니다.
  • Premium과 관련된 가격은 따로 찾을 수가 없었습니다.
  • 다만, 국제전화 요금 대신에 credit을 충전해서 사용하는 방법으로 credit을 구매할 수 있습니다.

Zoom 같은 경우는... (출처: https://zoom.us/pricing)
  • 무료로도 사용할 수 있지만 Premium 혜택이 존재합니다.
    • 각각 등급마다 가능한 feature들의 범위가 다릅니다.
    • 혜택들은 아래와 같습니다.
유저 사용량 측면에서는 위에 Google Play Store의 기록에 따르면 Skype가 훨씬 더 많다고 합니다.

자 그러면 오늘 여러 방면으로 Skype과 Zoom을 비교했는데 이걸로 마치도록 하겠습니다!

(Zoom) Zoom의 특징은?

지난 post에 Zoom을 설명하게된 계기를 알려드렸는데요, 이번에는 본격적으로 Zoom의 특징에 대해서 설명드리도록 하겠습니다.

Zoom은 온라인 화상 프로그램으로 온라인 통화나 회의를 할때에 주로 사용하는데요, 여러명과 동시에 통화할 수 있고, Screen-share 및 여러가지 기능 등을 지원합니다.

대략 제가 지금까지 사용해 본 경험으로 있는 특징들은...

  1. Screen-sharing 기능: 특정 창에서만 screen-sharing할 수 있는 기능이 있습니다.
  2. 캠 및 마이크 사용 설정 기능: 회의 중간에 필요하면 마이크를 끄고 킬 수가 있습니다.
  3. 기록 기능: 호스트가 현재 회의를 녹화해서 기록할 수가 있습니다.
  4. 채팅 기능: 마이크를 사용할 수 없을때에 채팅으로 전체에게 메세지를 보낼수도 있고 특정 유저와 만 메세지를 주고받고 할 수 있습니다.
이외에도 반응 및 손들기 기능, 유저 초대 기능 등등 여러가지 기능들이 많습니다.

그리고 이번 코로나 사태를 위해서 Zoom은 이러한 면으로 사용될 수 있다고 합니다.
  1. 원격 근무용: 개별 직원과 팀이 안전하고 성공적으로 원격 근무 환경으로 전환하도록 도와줌.
  2. 교육용: 교사와 관리자, 학생들이 Zoom을 통해 모여 온라인 수업을 실행하도록 도와줌.
  3. 가상 이벤트용: 대면 이벤트를 가상으로 전환 가능하도록 도와줌.
  4. 원격 의료용: 의사와 전문의, 기타 의료진이 Zoom을 이용해 원격으로 환자를 진단 및 치료할 수 있도록 도와줌.
이상입니다!

(Zoom) 이 주제를 고른 이유

이번 포스트에서는 Zoom에 대해서 설명하게된 계기를 알려드리려고 합니다.

이번 2019년부터 시작한 코로나19 사태가 COVID-19가 팬더믹으로 지정될만큼 너무 심각한 가운데 대학교들은 오프라인 개강을 할 수 없는 상황에 이르렀습니다. 그래서 전 세계적으로 대학교들이 개강하고 몇 주동안은 온라인으로 수업을 진행하게 되었는데요, 온라인 수업에 사용하는 플랫폼 여러개가 그러면서 등장했습니다.

제가 다니는 대학교 같은 경우는 LMS, Zoom을 주로 사용합니다. LMS는 교수님이 영상을 올리고 이를 학생들이 보는 형식이고, Zoom은 실시간으로 온라인 수업에 사용합니다. 그런데, 저 같은 경우는 Zoom을 이번 사태 전에 들어보지도 못 했어서 궁금증이 생기더라구요. 그래서 이번에 Zoom에 대해서 한 번 알아보도록 하겠습니다.

Monday, March 9, 2020

(PyCox) 세 번째, 활용 및 후기

안녕하세요?
이번에는 활용방법 및 후기를 작성해보도록 하겠습니다.

일단 활용방법은 모델들마다 조금씩 차이는 있습니다. 그렇지만 지금은 Cox-PH (DeepSurv)를 기준으로 설명드리겠습니다.
(참고: https://nbviewer.jupyter.org/github/havakv/pycox/blob/master/examples/cox-ph.ipynb)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn_pandas import DataFrameMapper

import torch
import torchtuples as tt

from pycox.datasets import metabric
from pycox.models import CoxPH
from pycox.evaluation import EvalSurv
대략 이 예시에서 사용된 것들입니다. 이를 참고하면 좋을 것 같습니다.

df_train = metabric.read_df()
df_test = df_train.sample(frac=0.2)
df_train = df_train.drop(df_test.index)
df_val = df_train.sample(frac=0.2)
df_train = df_train.drop(df_val.index)
예시 데이터로 METABRIC dataset을 사용했다고 합니다.
데이터 셋중에서 20%는 Test dataset으로, 16%는 Validation dataset으로 (80%의 20%이므로!) 그리고 나머지 64%는 Train dataset으로 사용했군요.


Dataset은 다음과 같이 생겼습니다.
x0~x8이 input으로 들어가고 duration 및 event가 label들에 해당한다고 보시면 아주 편하겠죠?
물론 정확한 설명은 아니지만 저는 survival dataset을 이미 안다는 전제하에 이를 설명하는 것입니다.

정확히 이해하시고 싶으시다면, DeepSurv논문을 한번 보시는 것을 추천드립니다. (https://bmcmedresmethodol.biomedcentral.com/articles/10.1186/s12874-018-0482-1에서 읽을 수 있으며 읽기에 어려운 논문은 아닙니다.)

cols_standardize = ['x0', 'x1', 'x2', 'x3', 'x8']
cols_leave = ['x4', 'x5', 'x6', 'x7']

standardize = [([col], StandardScaler()) for col in cols_standardize]
leave = [(col, None) for col in cols_leave]

x_mapper = DataFrameMapper(standardize + leave)

x_train = x_mapper.fit_transform(df_train).astype('float32')
x_val = x_mapper.transform(df_val).astype('float32')
x_test = x_mapper.transform(df_test).astype('float32')

get_target = lambda df: (df['duration'].values, df['event'].values)
y_train = get_target(df_train)
y_val = get_target(df_val)
durations_test, events_test = get_target(df_test)
val = x_val, y_val


Standardization을 하는 방법입니다. cols_standardize는 standardize를 할 column들이고 나머지는 안하는 column들입니다.
label같은 경우는 standardize가 필요도 없고 그냥 가져오기만 하면 됩니다.

in_features = x_train.shape[1]
num_nodes = [32, 32]
out_features = 1
batch_norm = True
dropout = 0.1
output_bias = False

net = tt.practical.MLPVanilla(in_features, num_nodes, out_features, batch_norm,
                              dropout, output_bias=output_bias)
# net = torch.nn.Sequential(
#     torch.nn.Linear(in_features, 32),
#     torch.nn.ReLU(),
#     torch.nn.BatchNorm1d(32),
#     torch.nn.Dropout(0.1),
    
#     torch.nn.Linear(32, 32),
#     torch.nn.ReLU(),
#     torch.nn.BatchNorm1d(32),
#     torch.nn.Dropout(0.1),
    
#     torch.nn.Linear(32, out_features)
# )
안에 들어가는 network를 결정해주는 것인데, 여기서 tt는 torchtuple으로 이 오픈소스 제작자가 만든 PyTorch기반의 package입니다. 저렇게 작성하면 net은 다음과 같이 생성됩니다.

torch.nn.Sequential로 PyTorch의 MLP 하나가 만들어지죠?
그래서 MLP를 자기가 직접 설계한것을 사용하고 싶으면 net에 torch.nn.Sequential로 설계한 것을 집어넣어도 됩니다.

model = CoxPH(net, tt.optim.Adam)
model.optimizer.set_lr(0.01)
epochs = 512
callbacks = [tt.callbacks.EarlyStopping()]
verbose = True
%%time
log = model.fit(x_train, y_train, batch_size, epochs, callbacks, verbose,
                val_data=val, val_batch_size=batch_size)
model.partial_log_likelihood(*val).mean()
일단 모델은 이렇게 Training을 시킵니다.
Constructor에 optimizer와 net으로 instance를 만든후에 learning rate를 지정해줍니다.
이후에 fit이라는 method로 training을 시켜줄수 있습니다.
fit method의 내부는 torchtuples 패키지에 자세히 적혀져 있으므로 이를 확인해주셨으면 합니다. (여기서는 주제를 벗어나므로 설명하지 않습니다.)

_ = model.compute_baseline_hazards()
surv = model.predict_surv_df(x_test)
ev = EvalSurv(surv, durations_test, events_test, censor_surv='km')
ev.concordance_td()
ev.integrated_brier_score(time_grid)
ev.integrated_nbll(time_grid)
Prediction + Evaluation 방법입니다.
baseline_hazards를 계후에 predict_surv_df method 통해서 prediction 값들이 나옵니다.
이를 EvalSurv에 실제 값들과 같이 넣으면은 evaluation을 직접 할수가 있습니다.

이정도까지 활용방법을 대략 설명드렸습니다.

자 그러면 이제 후기를 설명드리도록 하겠습니다.
저는 이제 METABRIC dataset이 아니라 산학프로젝트로 받은 데이터셋을 사용했는데 (공개하면 안되어 그냥 Dataset이라고만 해두겠습니다.) 저도 이것을 활용했습니다.
이제 계속 활용하면서 느낀 장단점을 설명해두겠습니다.


  • 장점
    • PyTorch로부터 나와서 PyTorch를 사용해 본 사람들에겐 편하다.
      • network도 PyTorch기반이고 많은 요소들이 PyTorch 기반을 해서 PyTorch에서 사용하던 요소들도 pycox에 활용할 수 있습니다.
    • 여러 모델들을 제공하여 상황에 따라서 다른 모델들을 사용하기도 편하며 training+prediction 구조가 모델마다 거의 비슷하다.
      • 위에 설명드린 사용법은 CoxPH로만 설명드렸지만 다른 모델들도 비슷합니다.
      • 그리고 또한 Deep-learning 기반의 survival model들을 지원하는 package들이 별로 없는데, 여기서는 여러가지 model들을 지원합니다.
    • torchtuples에서 제공하는 편리한 기능들도 사용가능하다.
      • 예: fit method, make_dataset method(여기서는 설명 안했지만)
  • 단점
    • 지나치게 torchtuples에서 의존하여 내부적으로 어떻게 구현했는지를 보려면 torchtuples package도 꼭 살펴봐야한다.
      • 제가 제일 크게 느낀 단점으로 거의 모든게 torchtuples에서 상속받아 활용해서 torchtuples package를 이해하는게 필수적입니다.
    • 자유도가 그렇게 높지 않다.
      • PyTorch기반인데, fit method로 training이 된다는 것은 그렇게 자유도가 높지 않다는 뜻입니다. PyTorch를 사용해보았다면 DataLoader를 만드는 것이 필수적이란 것을 알겁니다.
      • 그렇지만 fit method를 통해서 내부적으로 DataLoader를 만들고 사용하는데, 찾아보시면 sampler는 사용할수 없게 됩니다.
      • 그래서 sampler 등등을 포기할수 밖에 없는데, 사용하려면 torchtuples에 구현된 fit method를 보고 직접 따로 구현해야합니다. 
    • Gradient-based model이라서 그런지 covariates(공분산)를 계산하여 training-prediction하는 모델들보다 결과가 비교적 안 좋게 나옵니다.
      • sksurv가 covariates를 계산해서 prediction하는 package인데, 아직까지 더 좋은 결과를 보인적이 없습니다.
이 정도로 후기를 작성하고 마치도록 하겠습니다.
감사합니다!

(PyCox) 두 번째, 설치 방법?

안녕하세요?
이번 시간에는 pycox를 설치하는 방법에 대해서 설명드리도록 하겠습니다.
설치방법은 아주 간단하므로 설명이 그렇게 길지는 않을 것 같습니다.


먼저 PyTorch를 기본적으로 설치해야합니다.
conda 기준으로 PyTorch는 아래와 같이 설치합니다.

    conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

더 자세히 알고 싶으시다면 https://pytorch.org/로 들어가시면 됩니다.
이후에 자신이 원하는 버젼과 OS, 설치방법, 언어, CUDA 사용유무를 알맞게 고르신 후에 설치하시면 됩니다.

이후에 

     pip install pycox

이 명령어 한 줄로 설치할 수 있습니다.

이걸로 설치는 다 되었고 테스트 하거나 연습하려면 https://github.com/havakv/pycox에서 Get Started를 참고하시면 좋을 것 같습니다.
입문자들을 위해서 Jupyter용 ipynb 파일들이 있으니 설명과 같이 연습하실 수 있습니다!

이번에는 여기서 마치고 다음번에는 활용 및 후기를 설명드리도록 하겠습니다.
감사합니다.

(PyCox) 첫 번째, Pycox는 무엇인가?

안녕하세요?
이번에 수업 일환으로 pycox 강의를 올리게 되었습니다.
우선 pycox에 대해서 무엇인지 간략하게 설명하도록 하겠습니다.

pycox는 'havakv'라는 유저가 개발한 python package 중에 하나로서 PyTorch로 survival analysis 및 time-to-event prediction을 하기위해서 만들어졌습니다.

이 패키지 안에는 survival model들과 evaluation metrics 그리고 event-time 데이터셋들이 기본적으로 들어가있고, Pre-processing tool들도 존재합니다.

그리고 이 패키지는 동일 유저가 개발한 torchtuples를 기반으로 하기 때문에 소스 코드를 살펴보실 때에 같이 보는게 편합니다. (torchtuples는 또 PyTorch를 기반으로 해서 결국엔 PyTorch를 기반으로 한 패키지가 됩니다.)

이제 지원하는 Survival model들을 알려드리겠습니다.

  • Continuous-Time Models:
    • CoxTime
    • CoxCC
    • CoxPH (DeepSurv)
      • DeepSurv의 layer가 1개면 CoxPH가 되므로 같이 적어둔것 같습니다.
    • PCHazard
  • Discrete-Time Models:
    • LogisticHazard
    • PMF
    • DeepHit, DeepHitSingle
    • MTLR
    • BCESurv
Evaluation Criteria는 다음과 같이 지원합니다.
  • concordance_td
    • C-index라고도 합니다.
  • brier_score
  • nbll
  • integrated_brier_score
  • integrated_nbll
  • brier_score_admin / integrated_brier_score_admin
  • nbll_admin / integrated_nbll_admin
오늘은 이정도로만 설명하고 다음에는 어떻게 설치하는지를 설명드리도록 하겠습니다! 
감사합니다!