c-index及其在生存分析中的应用
一致性指数(concordance index)或者说c-index是用于评估算法预测效果的参数.定义上是指素有时间点上一致性对的比例.该参数在生物学上比如癌症预测上具有重要意义,可以用来评估癌症生存期预测的好坏.在python中可以使用lifelines包下的工具的concordance_index函数进行计算下面从具体的例子看看其具体的意义. 假设实际应用中有个癌症研究,其中6个患者的生存期情况分别为1个月,6个月,12个月,2年,3年,5年,如果预测结果为1个月,6个月,12个月,2年,3年,5年.那么该预测完全正确,c-index最高,为1,计算代码如下:
# 首先导入必要的一些包
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# 导入计算的函数concordance_index
! pip install lifelines
from lifelines.utils import concordance_index
# 数据dataframe设置
df = pd.DataFrame({"name":["张三","李四","王五","赵二","麻子","someone"],"survive":[1,6,12,24,36,60],"predicted":[1,6,12,24,36,60]})
c_index = concordance_index(df.survive,df.predicted)
print(df)
print(c_index)
# name survive predicted
# 0 张三 1 1
# 1 李四 6 6
# 2 王五 12 12
# 3 赵二 24 24
# 4 麻子 36 36
# 5 someone 60 60
# In [10]: c_index
# Out[10]: 1.0
事实上,c_index是忽略真实数值的,就像spearman一样是非参数检验方法,下面我们分别改变具体数值而保持顺序不变,结果仍然一样,c_index为1.
例子1:
df = pd.DataFrame({"name":["张三","李四","王五","赵二","麻子"],"survive":[1,6,12,24,36,60],"predicted":[1,1.1,1.2,2.4,3.6,6]})
c_index = concordance_index(df.survive,df.predicted)
print(df)
print(c_index)
# name survive predicted
# 0 张三 1 1.0
# 1 李四 6 1.1
# 2 王五 12 1.2
# 3 赵二 24 2.4
# 4 麻子 36 3.6
# 5 someone 60 6.0
# 1.0
例子2:
df = pd.DataFrame({"name":["张三","李四","王五","赵二","麻子"],"survive":[1,6,12,24,36,60],"predicted":[1,60,120,240,360,600]})
c_index = concordance_index(df.survive,df.predicted)
print(df)
print(c_index)
# name survive predicted
# 0 张三 1 1
# 1 李四 6 60
# 2 王五 12 120
# 3 赵二 24 240
# 4 麻子 36 360
# 5 someone 60 600
# 1.0
而如果顺序改变了的话,将会极大的造成c_index的变化.比如:
例子1:
df = pd.DataFrame({"name":["张三","李四","王五","赵二","麻子"],"survive":[1,6,12,24,36,60],"predicted":[1,12,6,36,24,60]})
c_index = concordance_index(df.survive,df.predicted)
print(df)
print(c_index)
# name survive predicted
# 0 张三 1 1
# 1 李四 6 12
# 2 王五 12 6
# 3 赵二 24 36
# 4 麻子 36 24
# 5 someone 60 60
# In [5]: c_index
# Out[5]: 0.8666666666666667
例子2:
df = pd.DataFrame({"name":["张三","李四","王五","赵二","麻子","someone"],"survive":[1,6,12,24,36,60],"predicted":[60,36,24,12,6,1]})
c_index = concordance_index(df.survive,df.predicted)
print(df)
print(c_index)
iOut[3]:
# name survive predicted
# 0 张三 1 60
# 1 李四 6 36
# 2 王五 12 24
# 3 赵二 24 12
# 4 麻子 36 6
# 5 someone 60 1
# In [4]: c_index
# Out[4]: 0.0
总结
一致性指数也即c_index在生存期预测方面可以用于评估算法性能,其对于预测的排列顺序敏感,而对具体数值不敏感.
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/592.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。