样本融合原理及实践

385 阅读2分钟

前言

本文从数据流的角度详细介绍样本融合的实现原理

场景

弊端

用户隐私数据放在第三方存在泄漏的风险

接下来咱聊聊如何多方安全隐私计算

整体流程图

数据交互过程

以上图为依据 用实际数据来验证

guest等待host发送密钥

密钥包含 e和n

guest原始数据集

原始数据集的id列

对id列添加随机数(python代码)

pd.DataFrame(dfaid).assign(a=dfaid.apply(lambda v:random.SystemRandom().getrandbits(128),axis=1))
得到id和对应的随机数r

对每一行数据进行处理

reh=dfaidr.apply(lamdba idr: int(self.hash(idr[0]),16)*gmpy2.powmod(int(idr[1]),self.e,self.n))

idr[0]就是id值
idr[1]就是随机数r的值
对id hash计算得到int值
r ^ e mod n即随机数r的e次幂取模n
两者乘积
结果是
将上面结果命名为结果B 该值传给host

将id和r和上面结果整合在一起得到结果命名为结果A


接下来介绍下host方

host方的数据集

获取id列

对每一个id进行处理

pd.DataFrame(dfbid).apply(lambda vv: sefl.ff2(vv,self.d,self.n),axis=1)

ff2函数:
gmpy2.powmod(int(self.hash(x[0]),16),d,n)
即
int(hash(id)) ^ d mod n

得到结果如下 命名为结果C
host将结果C发送给guest

host得到guest发送过来的结果B

对每一行数据进行处理

froma.apply(lambda vv: self.ff1(vv,self.d,self.n),axis=1)
gmpy2.powmod(x[0],d,n)
即id加密值 ^ d mod n

得到结果命名为结果D
host将结果D发送给guest

guest得到host发送过来的结果D

guest将结果D和本身的id和随机数r整合在一起 命名为结果F
对每一行数据进行处理

dfajoin.apply(lamdba vv:self.ff3(vv,mpz(slef.n)),axis=1)
gmpy2.divm(mpz(x[2]),mpz(x[1]),n)

结果命名为结果E

guest将结果E和F整合在一起命名为结果G

  • 前半部分数据
  • 后半部分数据

guest取交集

pd.DataFrame(merge(za,pd.DataFrame(toa2,columns=['z']),on='z')[self.columnId])

za就是结果G
toa2就是结果E

两个数据集取交集即可得到结果H
guest将融合数据集H发送给host即可

截止目前 上面的流程图结合实际的数据 你应该对整个样本融合的流程清晰了 接下来咱们看看其中涉及到的数学知识

上述过程涉及到的数学知识点

后记

接下来会揭秘特征分箱算法