导航

    精算后花园

    • 注册
    • 登录
    • 搜索
    • 版块
    • 最新
    • 话题
    • 热门
    • 用户
    • 群组
    1. 主页
    2. chilli_drop
    C
    • 资料
    • 关注
    • 粉丝
    • 主题
    • 帖子
    • 最佳
    • 群组

    chilli_drop

    @chilli_drop

    4
    声望
    5
    帖子
    3
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 2022年5月24日 03:15 最后登录 2022年6月8日 08:41

    chilli_drop 关注

    chilli_drop 发布的最佳帖子

    • 精算历史数据的几种调整方法

      以前上课老师有讲过数据清洗的几种方法,那时候感触不会这么深,什么时候用capping,什么时候需要补零,capping的几种方法什么时候使用。后来开始工作开始处理数据了,才知道数据为什么需要做这样的调整,出现问题了是哪个地方没有调整到位。这篇想总结一下数据调整的几种注意点:

      一、数据质量评估

      总量合理性:总量合理性,一是趋势进展合理性,也就是清单汇总后逐月趋势是不是合理,可以检验三角形数据和清单数据的看趋势;二是不同口径数据校验,比如检验业务数据和财务数据的合理性;

      关键字合理性:关键字的唯一性,字段值的缺失比例,字段区间的逻辑合理性等;

      指标合理性:指标合理性,各个维度的投保率,出险频率,赔付率,折扣率等的合理性等;

      二、数据调整(回写)

      转移:比如交强险限额提升,原来三者险的赔付会被吸收到交强险里,再比如三者险保额提升,原来条款保额为10万、20万、30万现在保额为20万、30万、40万,10万保单会转移到哪一档等等问题。需要设计一个转移模型,类似于马尔科夫链。

      趋势:社会经济生活每年的数据都会有变化,比如GDP每年会有6-7%的增速、不同地区人口老龄化趋势、最低工资标准每年会有所提升、各地每年出台的人伤赔偿标准、每年城乡一体化会影响医保、社保等的统筹。这些都会影响到赔付,拿车险举例,有死亡的事故会涉及到死亡赔偿标准,50岁死亡赔偿标准是最低收入的2倍(举例),30岁是10倍(举例),那么当地的最低收入标准和人口结构就会影响赔付,这些发生变化就需要进行调整。

      剔除:比如疫情期间大家几乎都不出行,因此赔付率非常低,几乎是无法调整的,所以可以采用的办法就是对于疫情期间的数据进行整体的剔除,视情况决定是否需要对剔除的区间进行趋势性补全数据(比如提出后某段时间内空白的数据采用线性插值,线性回归或者其他方法进行回补)

      值得注意的的有三点:

      1、回写的颗粒度:数据稳定、一致的最小类别

      2、记录各分项回写:所有的还原都需要做好记录,需要评估每个调整的影响大小

      3、异常的兜底:因为调整是有可能出现异常的,比如趋势调整中我们采用的是过去三年赔付率的平均增长率,对于数据不稳定的地区,可能第一年的赔付是1000(只是小伤),第二年是100000(出大问题),第三年又回归1000,那两年的增长率分别为9900%、-99%,两年的算术平均,增长4999.5%,第四年数据调整为1000*(4999.5%+1)那就不对了。因此调整规则需要正确的同时,需要设计一个规则兜底,比如全国每年大概增长10%,当出现异常值的时候,我们采用全国的数。

      三、路径选择

      我们合理根据核损通过金额逐步估计得到最终的赔款,也可以通过已决赔款得到最终赔款,要根据哪种要更好来确认最终的。类似于选因子,只不过精算的选因子需要和业务、理赔相关,一方面赔付结果时业务过程导致的,另一方面过程因子有利于管理。

      四、使用

      1、测算(分析)

      调整影响的大小:分为都汇总数据

      分析影响的驱动因素:各因子分项影响+结构性变化影响(这一块还挺复杂,可以但拎出来讲)

      2、预测

      1、数据清洗:常规的数据清洗方法比如capping、连续性变离散型、独热编码、聚类打标签等;

      2、一维或多维分析:看字段影响和趋势;

      3、可以上模型了……

      发布在 产品定价(Pricing)
      C
      chilli_drop
      2022年5月24日 03:19
    • python常见乱码类型总结

      最近python读取文件碰到好几次文件乱码的问题,想着集中解决一下,拾人牙慧汇总了一下大神们的解决办法:
      1、关于几种乱码产生的原因:
      0607.jpg

      来源:xuan196 https://blog.csdn.net/xuan196/article/details/115127416

      2、python处理中文乱码的问题:
      2.1 将要处理的乱码对象设置 encoding = utf-8''

          response = requests.get(url=url, headers=headers)
          response.encoding = 'utf-8'
      

      2.2 先设置encode的编码为iso-8859-1,再进行encoding的utf-8的设置

       # 通用处理中文乱码的解决方案
       img_name = img_name.encode('iso-8859-1').decode('gbk')
      

      来源:Ctrl精 https://blog.csdn.net/qq_43468607/article/details/116154254?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-116154254-blog-120749614.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-116154254-blog-120749614.pc_relevant_paycolumn_v3&utm_relevant_index=10

      通过以上两种方式我解决了最近遇到的所有了乱码问题,也感谢两篇文章的作者,分享出来共勉,侵删。

      发布在 Python
      C
      chilli_drop
      2022年6月7日 14:48
    • 美国Root车险运营运营模式研究

      一、运营模式
      Root通过“推荐激励计划”形成了用户自我驱动增长,借助3周的“试驾测试”评估用户驾驶风险,通过前两步积累的数据完成大数据定价和客群分析进行承保,然后在后端形成线上化、方便快捷的理赔,同时给与特色的增值服务。

      具体流程如下:
      ①购买车险:有两个类型的业务:第一种用户上一份保险还没有到期,到期后想要在root买保险,那么用户先下载app后,开始3周的试驾,期间会动态更新客户驾驶行为的评分,指出客户做的好的方面和不好的方面,鼓励客户改善驾驶行为。试驾驶结束之后公司会决定是否提供保险服务,如果决定不提供那么相当于这部分客户被公司拒绝了,未来可能会规定一个间隔期比如被拒绝的客户1年后可以再次申请试驾,或许就可以保进来了;如果客户被公司所接受,可以选择投保组合,购买为期半年的低折扣车险,当然用户如果觉得费率不合适也可以今早选择其他公司购买保险;第二种刚进来就需要买一份保险,那可以先按照传统的费率购买一份60天的车险,前30天继续采集刹车、转弯和是否集中注意力驾驶等行为,30天结束后如果驾驶行为为评分变差,则不再承保,尽快告诉客户,在剩余30天的保险期尽快找到别的保险公司承保,如果评分不变,则可以继续承保,如果评分变好,则决定可以以更低价格承保,并退还之前所交保费的差额。当然,如果决定承保,把最终折扣给到客户,客户可以决定是否接受,如果不接受也可以在剩下的30天尽快找到新的保险公司。
      保单每半年续约一次,可以选择月付或者一次性付款。
      ②用户裂变: root称这种推广方式为“推荐奖励计划”。App内会生成个性化来链接,用户将属于自己的链接推荐给朋友、同事、家人等,然后朋友通过链接完成app注册认证和三周的驾驶行为测试,并且被确认为有资格报价的客户(root公司的目标客户),完成之后双方都可以获得奖励,可以推荐给多人,每人累计最多可以转到1000美金。推荐人不一定是试驾合格的人,不合格的也可以推荐。
      ③服务闭环:从用户获取到报价、投保、用户驾驶风险管理、线上理赔、配套服务形成了闭环,用户自我驱动增长,自我进行投保安排。
      ④风险评估
      后端大数据定价,其中驾驶行为因素对定价的影响占比能到35%。(仍需验证)
      评估指标:
      专注驾驶:不被手机上的文字或更换广播电台分心,专注于驾驶和前进的道路;
      温和的转弯:放慢速度,安全转弯,轻松进出每个转弯
      刹车平稳:给自己足够的时间刹车。频繁的突然刹车表明你可能驾驶的离前面的汽车太近,或没有专注于道路
      安全时间:避免深夜旅行,尤其是周末。
      ⑤增值服务
      第一是与LYFT的合作,app用户法定节假日免费乘坐网约车;
      第二是针对特斯拉司机的折扣。
      第三是每个州的增值服务会有差别。

      二、支撑逻辑
      1、目标用户增长快的逻辑
      ①客户价格敏感:车险市场大部分用户都是价格敏感的,较大的保费折扣和推荐奖励金能给客户很大的购买激励。
      ②用户推荐裂变:熟人口碑和推荐奖励金让app快速传播。
      但是,推荐奖励和保费折扣机制决定了刚开始选择root的用户是价格敏感性的客户。所以这样的增长是建立在低价、好口碑以及维持客户低风险水平的基础之上。
      2、未来盈利的逻辑
      ①无中介:root的用户和保费增长是通过用户互相推荐获取奖励金来实现的,因此渠道费用几乎是没有的。
      ②维持客户低风险水平:通过三周的试驾驶对客户风险水平会有比较充分的评估,或者可以通过三周的试驾驶引导客户规范自己的驾驶行为。
      值得注意的是:
      Root的风险定价中,驾驶行为在它整个保费定价的占比达到了35%,占比是比较高的。但是不能证明驾驶行为这件事,到底与保费有多强的相关性?是不是能达到将近能降低一半保费的这种相关性呢?
      3、道德风险的控制
      针对试驾驶结束后用户驾驶行为变差的道德风险,root的措施如下:
      客户每60天续保一次,购买时的费率不是最终费率,前30天处于试驾驶状态,前30天继续采集刹车、转弯和是否集中注意力驾驶等行为,30天结束后如果驾驶行为为评分变差,则不在承保,尽快告诉客户,在剩余30天的保险期尽快找到别的保险公司承保,如果评分不变,则可以继续承保,如果评分变好,则决定可以以更低利率承保,并退还之前所交保费的差额。当然,如果决定承保,把最终折扣给到客户,客户可以决定是否接受,如果不接受也可以在剩下的30天尽快找到新的保险公司。
      4、品牌依赖度
      车险消费是低频消费,这样的低价模式再短时间内可能内吸引大部分用户,但是要维持长时间的增长需要用户的品牌以来,做好服务,维护好品牌这个模式才可能持续下去。

      三、存在问题
      1、用户信息授权
      必须保持GPS开启,是比较困难时,因为要让app保持再后台工作。
      2、移动手机带来的信息真实性问题
      比如如何分别用户是不是在乘用交通工具、如何区分开车的是不是本人、同时驾驶行为判断占比又这么重、如何判断客户是否集中注意力;
      3、持续经营的问题
      4、应该有驾驶行为警示或者提醒、甚至是中断恶略驾驶行为的功能。

      发布在 市场调研
      C
      chilli_drop
      2022年6月8日 08:34
    • 广义线性模型(GLM)及其可解释性讨论

      今天总结广义线性模型(GLM :Generalized Linear Models)的原理,更重要的是想思考一下广义线性模型的可解释性问题。由于平时的工作并不是做理论研究,我们的精算模型跑出来以后是要用在业务中的,会切实影响到我们客户每一单的保费折扣,为什么这个客户享受比较大的折扣,那个客户没有享受折扣呢?因为客户某一阶段的状态是高风险的(比如喜欢在凌晨时段出行、上年发生了事故造成了赔款等),因此不能给与折扣,进一步我们鼓励客户管理风险行为,进而下一年能享受折扣。我们需要和客户对话,让使用模型的人相信我们,让风险和价格匹配起来,这就是模型的可解释性的意义。
      线性模型可以说是我们最熟悉的模型了,可以说是现实生活中最直接的因果关系。如果把模型比作是人的想法,线性模型就是“条件反射”,比如喝一口水会长胖一斤,和喝口水会长胖两斤,请问喝三口水长胖几斤?y=ax+b (本例中a=1,b=0),会长胖三斤,胖的非常线性。

      非线性模型类似于人们更复杂的想法,添加了更多的约束和相互的影响。比如喝一口水长胖一斤,喝两口水要上一次厕所,所以可能只长胖1.414斤,喝四口水可能要上两趟厕所,运动一下还要出汗,因此可能只长胖2斤。 [公式] ,人的身体会新陈代谢,会自我调节,各方面的约束不会让你一直胖下去。这个模型开始考虑了一些现实的约束,添加进了人为活动的影响,模仿了稍微复杂一点的现象。

      生活中还会有更复杂的影响机制,未来接触到的算法也会有更多更复杂的形式,但是我想他们都应该来源于现实,都是为了找到现实世界中的“规律”(或者说因果),因此一定是和现实相通的,我想在学习算法的过程可能也是我认知风险的过程吧~
      2.广义线性模型的现实意义

      前面说了线性模型与非线性模型的区别,那什么叫做广义线性模型呢?意思是在线性模型的基础上增加了其他约束。

      首先,线性模型形式是这样的: y=β1x1+β2x2+……+βn+a,意思是 [公式]变化多少 x就相应比例的变化多少,但是这个模型存前提: x之间是不相关联的,y的特征分布受限(线性系统部分β1x1+β2x2+……+βn +高斯分布随机部分a )。比如 y用来描述车险的赔款金额,保险公司通常认为有相当一部分车辆发生的赔款金额是0,其余的赔款金额按照一定概率发生,如下图:
      x1.jpg
      线性模型模拟出来的 y可能无法满足这样的分布,因此就无法准确的模拟现实中车险事故中的赔款,不符合车险事故的发生规律,此时需要对线性模型进行拓展,也就是广义线性模型。
      3.指数分布族
      指概率密度函数能写成x2.png (或者 x3.png ,两种形式是一样的)的分布,主要有正态分布,伽马分布,二项分布,泊松分布,负二项分布等。

      广义线性模型中 Y的分布通常是指数分布族中的一种,逻辑回归模型中 Y 使用的伯努利分布就是指数分布族中的一种。本篇中车险索赔估计中 Tweedie分布也属于是指数分布族的一种。

      为什么要使用指数分布族呢?个人觉得是因为指数分布族习形式在估计参数和损失函数方面更好处理。
      4.广义线性模型的思路

      还是以车险中的索赔金额 Y为例,我们认为 Y服从Tweedie分布,即 x4.png , 其概率密度函数为x5.png ,转换成指数分布族后(这个公式满足GLM模型中指数分布族的形式,公式比较复杂可以不看,就看成是描述索赔金额的数学公式就可以了)

      也就意味着保险公司认为有相当一部分车是不会发生索赔的(索赔金额为0, Y=0 ),而在索赔金额大于0的情况下,服从一个连续分布,这个分布的形状有点像正态分布,索赔金额聚集在平均值附近,随着索赔金额的上升,发生的概率也在减小,还留着尾巴,从形状上来看比较符合车险事故的发生规律。具体步骤如下:

      step1:确定描述对象(因变量)的分布——车险索赔金额选择Tweedie分布

      step2:选择连接函数—— Tweedie分布选择对数为连接函数

      step3:线性回归估计参数——建立特征值与目标值的关系估计出参数值

      step4:模型检验——残差应该是均匀分布的

      5.GLM模型可解释性的初步讨论(未来会针对GLM模型的可解释性做针对性的讨论)

      我们模型评估出了结果,更关注的是这个结果在落地使用时会出现什么问题,这个时候可解释性就变得很重要。比如说我们的客户购买车险,可能价格非常高,比别的公司都要高,或者是被拒保了(拒绝承保),这个结果是出乎他意料的,自然而然的他会想知道为什么;再比如我们在购买物品或者观看视频的时候,相关的东西会推荐给我,比如电商给我推荐了手机壳,很可能是因为我购买了新手机。这就是可解释性的意义,很多的公司也都在增加市场策略的可解释性。

      但模型有时候是不需要解释的,比如我们并不需要模型给出理由,而是给出惊喜(随机的结果哦),今天我不知道圣诞节去哪里吃饭,希望模型能随机给我一个建议,这时候并不需要理由;比如模型的效果已经被很好的验证,比如寄快递的地址识别已经很好的被很好的应用了,此时就不那么关心可解释性了;或者当模型给出了很好的解释性之后,使用的对象开始欺骗模型,人为去更改特征值操作系统,对模型的准确性造成损害。

      关于模型的可解释性可以通过以下几个方面去思考:

      公平性:确保模型违反价值导向、社会道德或者法律的偏见。由于模型是建立在样本数据基础之上建立起来的,不可避免的出现一些人口统计上的特征,比如地域或者性别等的特点,但是产品不能因为这些特点而进行歧视性的定价。
      隐私性:确保数据中的敏感信息受到保护。
      可靠性(稳健性):确保输入中的小变化不会导致预测发生大的变化。比如25岁的保费为5000元,26岁为1000元,差异过大一方面会让消费者产生疑惑,另一方面可能会让消费者瞒报年龄或者更改投保人。
      模型改进:比如有些模型给一些因子赋予了比较大的权重,事实上这个因子只是碰巧有影响,对于因变量(被解释变量)并没有直接的因果关系,可解释性角度会删掉这个因子。
      因果关系:与黑匣子相比,人类会选择相信有因果关系的市场行为,比如因为上一年出险了,所以下一年保费高。
      6.GLM模型的缺陷

      1、某些因子相关性较强的话会削弱其他因子的重要性

      2、因变量与自变量之间关系本质上还是线性的

      二、代码举例

      import matplotlib.pyplot as plt
      import numpy as np
      from sklearn.model_selection import train_test_split 
      from sklearn import datasets,linear_model
      
      
      ## 导入数据
      diabetes = datasets.load_diabetes() #使用 scikit-learn 自带的一个糖尿病病人的数据集
      X_train,X_test,y_train,y_test=train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)
      
      ## 建模
      regr = linear_model.LinearRegression()
      regr.fit(X_train, y_train)
      print('Coefficients:%s, intercept %.2f'%(regr.coef_,regr.intercept_))
      print("Residual sum of squares: %.2f"% np.mean((regr.predict(X_test) - y_test) ** 2))
      print('Score: %.2f' % regr.score(X_test, y_test))
      
      '''
      -----------------------Tweedie------------------
      '''
      
      ## 导入库函数
      import matplotlib.pyplot as plt
      import numpy as np
      from sklearn.model_selection import train_test_split 
      from sklearn import datasets
      from sklearn.linear_model import TweedieRegressor
      
      ## 导入数据
      diabetes = datasets.load_diabetes() #使用 scikit-learn 自带的一个糖尿病病人的数据集
      X_train,X_test,y_train,y_test=train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)
      
      ## 建模
      regr = TweedieRegressor(tol=0.0001,max_iter=5000,power=1.6,link='log',alpha=0.001)
      regr.fit(X_train, y_train)
      print('Coefficients:%s, intercept %.2f'%(regr.coef_,regr.intercept_))
      print("Residual sum of squares: %.2f"% np.mean((regr.predict(X_test) - y_test) ** 2))
      print('Score: %.2f' % regr.score(X_test, y_test))
      
      发布在 产品定价(Pricing)
      C
      chilli_drop
      2022年5月24日 03:42

    chilli_drop 发布的最新帖子

    • 美国Root车险运营运营模式研究

      一、运营模式
      Root通过“推荐激励计划”形成了用户自我驱动增长,借助3周的“试驾测试”评估用户驾驶风险,通过前两步积累的数据完成大数据定价和客群分析进行承保,然后在后端形成线上化、方便快捷的理赔,同时给与特色的增值服务。

      具体流程如下:
      ①购买车险:有两个类型的业务:第一种用户上一份保险还没有到期,到期后想要在root买保险,那么用户先下载app后,开始3周的试驾,期间会动态更新客户驾驶行为的评分,指出客户做的好的方面和不好的方面,鼓励客户改善驾驶行为。试驾驶结束之后公司会决定是否提供保险服务,如果决定不提供那么相当于这部分客户被公司拒绝了,未来可能会规定一个间隔期比如被拒绝的客户1年后可以再次申请试驾,或许就可以保进来了;如果客户被公司所接受,可以选择投保组合,购买为期半年的低折扣车险,当然用户如果觉得费率不合适也可以今早选择其他公司购买保险;第二种刚进来就需要买一份保险,那可以先按照传统的费率购买一份60天的车险,前30天继续采集刹车、转弯和是否集中注意力驾驶等行为,30天结束后如果驾驶行为为评分变差,则不再承保,尽快告诉客户,在剩余30天的保险期尽快找到别的保险公司承保,如果评分不变,则可以继续承保,如果评分变好,则决定可以以更低价格承保,并退还之前所交保费的差额。当然,如果决定承保,把最终折扣给到客户,客户可以决定是否接受,如果不接受也可以在剩下的30天尽快找到新的保险公司。
      保单每半年续约一次,可以选择月付或者一次性付款。
      ②用户裂变: root称这种推广方式为“推荐奖励计划”。App内会生成个性化来链接,用户将属于自己的链接推荐给朋友、同事、家人等,然后朋友通过链接完成app注册认证和三周的驾驶行为测试,并且被确认为有资格报价的客户(root公司的目标客户),完成之后双方都可以获得奖励,可以推荐给多人,每人累计最多可以转到1000美金。推荐人不一定是试驾合格的人,不合格的也可以推荐。
      ③服务闭环:从用户获取到报价、投保、用户驾驶风险管理、线上理赔、配套服务形成了闭环,用户自我驱动增长,自我进行投保安排。
      ④风险评估
      后端大数据定价,其中驾驶行为因素对定价的影响占比能到35%。(仍需验证)
      评估指标:
      专注驾驶:不被手机上的文字或更换广播电台分心,专注于驾驶和前进的道路;
      温和的转弯:放慢速度,安全转弯,轻松进出每个转弯
      刹车平稳:给自己足够的时间刹车。频繁的突然刹车表明你可能驾驶的离前面的汽车太近,或没有专注于道路
      安全时间:避免深夜旅行,尤其是周末。
      ⑤增值服务
      第一是与LYFT的合作,app用户法定节假日免费乘坐网约车;
      第二是针对特斯拉司机的折扣。
      第三是每个州的增值服务会有差别。

      二、支撑逻辑
      1、目标用户增长快的逻辑
      ①客户价格敏感:车险市场大部分用户都是价格敏感的,较大的保费折扣和推荐奖励金能给客户很大的购买激励。
      ②用户推荐裂变:熟人口碑和推荐奖励金让app快速传播。
      但是,推荐奖励和保费折扣机制决定了刚开始选择root的用户是价格敏感性的客户。所以这样的增长是建立在低价、好口碑以及维持客户低风险水平的基础之上。
      2、未来盈利的逻辑
      ①无中介:root的用户和保费增长是通过用户互相推荐获取奖励金来实现的,因此渠道费用几乎是没有的。
      ②维持客户低风险水平:通过三周的试驾驶对客户风险水平会有比较充分的评估,或者可以通过三周的试驾驶引导客户规范自己的驾驶行为。
      值得注意的是:
      Root的风险定价中,驾驶行为在它整个保费定价的占比达到了35%,占比是比较高的。但是不能证明驾驶行为这件事,到底与保费有多强的相关性?是不是能达到将近能降低一半保费的这种相关性呢?
      3、道德风险的控制
      针对试驾驶结束后用户驾驶行为变差的道德风险,root的措施如下:
      客户每60天续保一次,购买时的费率不是最终费率,前30天处于试驾驶状态,前30天继续采集刹车、转弯和是否集中注意力驾驶等行为,30天结束后如果驾驶行为为评分变差,则不在承保,尽快告诉客户,在剩余30天的保险期尽快找到别的保险公司承保,如果评分不变,则可以继续承保,如果评分变好,则决定可以以更低利率承保,并退还之前所交保费的差额。当然,如果决定承保,把最终折扣给到客户,客户可以决定是否接受,如果不接受也可以在剩下的30天尽快找到新的保险公司。
      4、品牌依赖度
      车险消费是低频消费,这样的低价模式再短时间内可能内吸引大部分用户,但是要维持长时间的增长需要用户的品牌以来,做好服务,维护好品牌这个模式才可能持续下去。

      三、存在问题
      1、用户信息授权
      必须保持GPS开启,是比较困难时,因为要让app保持再后台工作。
      2、移动手机带来的信息真实性问题
      比如如何分别用户是不是在乘用交通工具、如何区分开车的是不是本人、同时驾驶行为判断占比又这么重、如何判断客户是否集中注意力;
      3、持续经营的问题
      4、应该有驾驶行为警示或者提醒、甚至是中断恶略驾驶行为的功能。

      发布在 市场调研
      C
      chilli_drop
      2022年6月8日 08:34
    • python常见乱码类型总结

      最近python读取文件碰到好几次文件乱码的问题,想着集中解决一下,拾人牙慧汇总了一下大神们的解决办法:
      1、关于几种乱码产生的原因:
      0607.jpg

      来源:xuan196 https://blog.csdn.net/xuan196/article/details/115127416

      2、python处理中文乱码的问题:
      2.1 将要处理的乱码对象设置 encoding = utf-8''

          response = requests.get(url=url, headers=headers)
          response.encoding = 'utf-8'
      

      2.2 先设置encode的编码为iso-8859-1,再进行encoding的utf-8的设置

       # 通用处理中文乱码的解决方案
       img_name = img_name.encode('iso-8859-1').decode('gbk')
      

      来源:Ctrl精 https://blog.csdn.net/qq_43468607/article/details/116154254?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-116154254-blog-120749614.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-116154254-blog-120749614.pc_relevant_paycolumn_v3&utm_relevant_index=10

      通过以上两种方式我解决了最近遇到的所有了乱码问题,也感谢两篇文章的作者,分享出来共勉,侵删。

      发布在 Python
      C
      chilli_drop
      2022年6月7日 14:48
    • 广义线性模型(GLM)及其可解释性讨论

      今天总结广义线性模型(GLM :Generalized Linear Models)的原理,更重要的是想思考一下广义线性模型的可解释性问题。由于平时的工作并不是做理论研究,我们的精算模型跑出来以后是要用在业务中的,会切实影响到我们客户每一单的保费折扣,为什么这个客户享受比较大的折扣,那个客户没有享受折扣呢?因为客户某一阶段的状态是高风险的(比如喜欢在凌晨时段出行、上年发生了事故造成了赔款等),因此不能给与折扣,进一步我们鼓励客户管理风险行为,进而下一年能享受折扣。我们需要和客户对话,让使用模型的人相信我们,让风险和价格匹配起来,这就是模型的可解释性的意义。
      线性模型可以说是我们最熟悉的模型了,可以说是现实生活中最直接的因果关系。如果把模型比作是人的想法,线性模型就是“条件反射”,比如喝一口水会长胖一斤,和喝口水会长胖两斤,请问喝三口水长胖几斤?y=ax+b (本例中a=1,b=0),会长胖三斤,胖的非常线性。

      非线性模型类似于人们更复杂的想法,添加了更多的约束和相互的影响。比如喝一口水长胖一斤,喝两口水要上一次厕所,所以可能只长胖1.414斤,喝四口水可能要上两趟厕所,运动一下还要出汗,因此可能只长胖2斤。 [公式] ,人的身体会新陈代谢,会自我调节,各方面的约束不会让你一直胖下去。这个模型开始考虑了一些现实的约束,添加进了人为活动的影响,模仿了稍微复杂一点的现象。

      生活中还会有更复杂的影响机制,未来接触到的算法也会有更多更复杂的形式,但是我想他们都应该来源于现实,都是为了找到现实世界中的“规律”(或者说因果),因此一定是和现实相通的,我想在学习算法的过程可能也是我认知风险的过程吧~
      2.广义线性模型的现实意义

      前面说了线性模型与非线性模型的区别,那什么叫做广义线性模型呢?意思是在线性模型的基础上增加了其他约束。

      首先,线性模型形式是这样的: y=β1x1+β2x2+……+βn+a,意思是 [公式]变化多少 x就相应比例的变化多少,但是这个模型存前提: x之间是不相关联的,y的特征分布受限(线性系统部分β1x1+β2x2+……+βn +高斯分布随机部分a )。比如 y用来描述车险的赔款金额,保险公司通常认为有相当一部分车辆发生的赔款金额是0,其余的赔款金额按照一定概率发生,如下图:
      x1.jpg
      线性模型模拟出来的 y可能无法满足这样的分布,因此就无法准确的模拟现实中车险事故中的赔款,不符合车险事故的发生规律,此时需要对线性模型进行拓展,也就是广义线性模型。
      3.指数分布族
      指概率密度函数能写成x2.png (或者 x3.png ,两种形式是一样的)的分布,主要有正态分布,伽马分布,二项分布,泊松分布,负二项分布等。

      广义线性模型中 Y的分布通常是指数分布族中的一种,逻辑回归模型中 Y 使用的伯努利分布就是指数分布族中的一种。本篇中车险索赔估计中 Tweedie分布也属于是指数分布族的一种。

      为什么要使用指数分布族呢?个人觉得是因为指数分布族习形式在估计参数和损失函数方面更好处理。
      4.广义线性模型的思路

      还是以车险中的索赔金额 Y为例,我们认为 Y服从Tweedie分布,即 x4.png , 其概率密度函数为x5.png ,转换成指数分布族后(这个公式满足GLM模型中指数分布族的形式,公式比较复杂可以不看,就看成是描述索赔金额的数学公式就可以了)

      也就意味着保险公司认为有相当一部分车是不会发生索赔的(索赔金额为0, Y=0 ),而在索赔金额大于0的情况下,服从一个连续分布,这个分布的形状有点像正态分布,索赔金额聚集在平均值附近,随着索赔金额的上升,发生的概率也在减小,还留着尾巴,从形状上来看比较符合车险事故的发生规律。具体步骤如下:

      step1:确定描述对象(因变量)的分布——车险索赔金额选择Tweedie分布

      step2:选择连接函数—— Tweedie分布选择对数为连接函数

      step3:线性回归估计参数——建立特征值与目标值的关系估计出参数值

      step4:模型检验——残差应该是均匀分布的

      5.GLM模型可解释性的初步讨论(未来会针对GLM模型的可解释性做针对性的讨论)

      我们模型评估出了结果,更关注的是这个结果在落地使用时会出现什么问题,这个时候可解释性就变得很重要。比如说我们的客户购买车险,可能价格非常高,比别的公司都要高,或者是被拒保了(拒绝承保),这个结果是出乎他意料的,自然而然的他会想知道为什么;再比如我们在购买物品或者观看视频的时候,相关的东西会推荐给我,比如电商给我推荐了手机壳,很可能是因为我购买了新手机。这就是可解释性的意义,很多的公司也都在增加市场策略的可解释性。

      但模型有时候是不需要解释的,比如我们并不需要模型给出理由,而是给出惊喜(随机的结果哦),今天我不知道圣诞节去哪里吃饭,希望模型能随机给我一个建议,这时候并不需要理由;比如模型的效果已经被很好的验证,比如寄快递的地址识别已经很好的被很好的应用了,此时就不那么关心可解释性了;或者当模型给出了很好的解释性之后,使用的对象开始欺骗模型,人为去更改特征值操作系统,对模型的准确性造成损害。

      关于模型的可解释性可以通过以下几个方面去思考:

      公平性:确保模型违反价值导向、社会道德或者法律的偏见。由于模型是建立在样本数据基础之上建立起来的,不可避免的出现一些人口统计上的特征,比如地域或者性别等的特点,但是产品不能因为这些特点而进行歧视性的定价。
      隐私性:确保数据中的敏感信息受到保护。
      可靠性(稳健性):确保输入中的小变化不会导致预测发生大的变化。比如25岁的保费为5000元,26岁为1000元,差异过大一方面会让消费者产生疑惑,另一方面可能会让消费者瞒报年龄或者更改投保人。
      模型改进:比如有些模型给一些因子赋予了比较大的权重,事实上这个因子只是碰巧有影响,对于因变量(被解释变量)并没有直接的因果关系,可解释性角度会删掉这个因子。
      因果关系:与黑匣子相比,人类会选择相信有因果关系的市场行为,比如因为上一年出险了,所以下一年保费高。
      6.GLM模型的缺陷

      1、某些因子相关性较强的话会削弱其他因子的重要性

      2、因变量与自变量之间关系本质上还是线性的

      二、代码举例

      import matplotlib.pyplot as plt
      import numpy as np
      from sklearn.model_selection import train_test_split 
      from sklearn import datasets,linear_model
      
      
      ## 导入数据
      diabetes = datasets.load_diabetes() #使用 scikit-learn 自带的一个糖尿病病人的数据集
      X_train,X_test,y_train,y_test=train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)
      
      ## 建模
      regr = linear_model.LinearRegression()
      regr.fit(X_train, y_train)
      print('Coefficients:%s, intercept %.2f'%(regr.coef_,regr.intercept_))
      print("Residual sum of squares: %.2f"% np.mean((regr.predict(X_test) - y_test) ** 2))
      print('Score: %.2f' % regr.score(X_test, y_test))
      
      '''
      -----------------------Tweedie------------------
      '''
      
      ## 导入库函数
      import matplotlib.pyplot as plt
      import numpy as np
      from sklearn.model_selection import train_test_split 
      from sklearn import datasets
      from sklearn.linear_model import TweedieRegressor
      
      ## 导入数据
      diabetes = datasets.load_diabetes() #使用 scikit-learn 自带的一个糖尿病病人的数据集
      X_train,X_test,y_train,y_test=train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)
      
      ## 建模
      regr = TweedieRegressor(tol=0.0001,max_iter=5000,power=1.6,link='log',alpha=0.001)
      regr.fit(X_train, y_train)
      print('Coefficients:%s, intercept %.2f'%(regr.coef_,regr.intercept_))
      print("Residual sum of squares: %.2f"% np.mean((regr.predict(X_test) - y_test) ** 2))
      print('Score: %.2f' % regr.score(X_test, y_test))
      
      发布在 产品定价(Pricing)
      C
      chilli_drop
      2022年5月24日 03:42
    • 非寿险责任准备金评估:数据

      数据是人行为的抽象化表示,只有数据和人的行为和现实情况产生了联系,数据本身和模型才有意义。数据异常的背后本身也就意味着行为、现实的异常。模型的基础是数据,所有的量化和评估前提都要建立再良好的数据基础上,否则就只能基于经验无奈的拍假设。

      模型本身不是追求,“准”才是追求,准的含义是精准与合适的平衡,颗粒清楚、维度清晰的同时还要明白保险行业终归是建立在大数法则的基础上的。有管理性和前瞻性的精算才有价值,也就意味着细节处理和方法选择才是精算水平的象征,建模不能随意,核心是数据治理不可以混乱。总结起来其实也就是:数据求真,模型求准。

      一、数据来源
      x6.jpg
      二、指标

      已付赔款:已经支付的赔款,是预测未来发生赔款的基础。

      估损金额:理赔估计已经报告的赔案估计的预估赔款,依赖理赔的经验和实际的损失状况。

      费用:理赔费用,总间接费用,用来评估理赔费用准备金。

      保费收入:实收保费、已赚保费。

      保费批改、退保

      佣金:保险代理人或经纪人等佣金

      赔付率:直接赔付率、满期赔付率、终极赔付率(保单赔付率)。

      赔案件数:已报告件数、已结案件数、注销案件、零结案件、重开案件。

      风险暴露数:风险单位数。

      案均赔款:赔款÷案件数

      出险频率:案件数÷风险单位数

      案件延迟:报案延迟、立案延迟、支付延迟。结案速度。

      赔款不确定性(风险边际):赔款评估的置信区间。

      再保险摊回

      三、数据口径

      保单年:保单承保日期为统计标准,签单时间为起点。

      事故年:保险事故发生时间为统计标准。

      报告年:保险事故的报告时间为统计标准。

      日历年:日历时间,一般会计上使用。

      实际生效:发生保单退保、批改时,实际生效保单发生变化。

      四、勾稽关系

      数据是一个一个点,指标是一条条线,口径是一个个面,勾稽关系之和则是一种组织关系,就像杜邦分析表一样,是一个根系的体系。其实准备金是不是也可以做一个类似于杜邦分析表一样的东西呢?未来学完这本书之后我希望自己可以画出来。

      发布在 准备金评估(Valuation)
      C
      chilli_drop
      2022年5月24日 03:21
    • 精算历史数据的几种调整方法

      以前上课老师有讲过数据清洗的几种方法,那时候感触不会这么深,什么时候用capping,什么时候需要补零,capping的几种方法什么时候使用。后来开始工作开始处理数据了,才知道数据为什么需要做这样的调整,出现问题了是哪个地方没有调整到位。这篇想总结一下数据调整的几种注意点:

      一、数据质量评估

      总量合理性:总量合理性,一是趋势进展合理性,也就是清单汇总后逐月趋势是不是合理,可以检验三角形数据和清单数据的看趋势;二是不同口径数据校验,比如检验业务数据和财务数据的合理性;

      关键字合理性:关键字的唯一性,字段值的缺失比例,字段区间的逻辑合理性等;

      指标合理性:指标合理性,各个维度的投保率,出险频率,赔付率,折扣率等的合理性等;

      二、数据调整(回写)

      转移:比如交强险限额提升,原来三者险的赔付会被吸收到交强险里,再比如三者险保额提升,原来条款保额为10万、20万、30万现在保额为20万、30万、40万,10万保单会转移到哪一档等等问题。需要设计一个转移模型,类似于马尔科夫链。

      趋势:社会经济生活每年的数据都会有变化,比如GDP每年会有6-7%的增速、不同地区人口老龄化趋势、最低工资标准每年会有所提升、各地每年出台的人伤赔偿标准、每年城乡一体化会影响医保、社保等的统筹。这些都会影响到赔付,拿车险举例,有死亡的事故会涉及到死亡赔偿标准,50岁死亡赔偿标准是最低收入的2倍(举例),30岁是10倍(举例),那么当地的最低收入标准和人口结构就会影响赔付,这些发生变化就需要进行调整。

      剔除:比如疫情期间大家几乎都不出行,因此赔付率非常低,几乎是无法调整的,所以可以采用的办法就是对于疫情期间的数据进行整体的剔除,视情况决定是否需要对剔除的区间进行趋势性补全数据(比如提出后某段时间内空白的数据采用线性插值,线性回归或者其他方法进行回补)

      值得注意的的有三点:

      1、回写的颗粒度:数据稳定、一致的最小类别

      2、记录各分项回写:所有的还原都需要做好记录,需要评估每个调整的影响大小

      3、异常的兜底:因为调整是有可能出现异常的,比如趋势调整中我们采用的是过去三年赔付率的平均增长率,对于数据不稳定的地区,可能第一年的赔付是1000(只是小伤),第二年是100000(出大问题),第三年又回归1000,那两年的增长率分别为9900%、-99%,两年的算术平均,增长4999.5%,第四年数据调整为1000*(4999.5%+1)那就不对了。因此调整规则需要正确的同时,需要设计一个规则兜底,比如全国每年大概增长10%,当出现异常值的时候,我们采用全国的数。

      三、路径选择

      我们合理根据核损通过金额逐步估计得到最终的赔款,也可以通过已决赔款得到最终赔款,要根据哪种要更好来确认最终的。类似于选因子,只不过精算的选因子需要和业务、理赔相关,一方面赔付结果时业务过程导致的,另一方面过程因子有利于管理。

      四、使用

      1、测算(分析)

      调整影响的大小:分为都汇总数据

      分析影响的驱动因素:各因子分项影响+结构性变化影响(这一块还挺复杂,可以但拎出来讲)

      2、预测

      1、数据清洗:常规的数据清洗方法比如capping、连续性变离散型、独热编码、聚类打标签等;

      2、一维或多维分析:看字段影响和趋势;

      3、可以上模型了……

      发布在 产品定价(Pricing)
      C
      chilli_drop
      2022年5月24日 03:19