运筹从业者也需要的因果推断入门:基础概念解析和体系化方法理解

news2024/9/28 9:41:57

文章目录

  • 1 引言
  • 2 相关关系 VS 因果关系
    • 2.1 相关关系
    • 2.2 因果关系
    • 2.3 相关关系不等于因果关系
  • 3 因果推断方法
    • 3.1 方法体系
    • 3.2 方法理解
  • 4 运筹从业者也需要因果推断
    • 4.1 问题描述
    • 4.2 算法方案
    • 4.3 算法验证
  • 5 总结
  • 6 相关阅读

1 引言

已经3月初了,原计划的因果推断学习还没有任何阶段性的成果,不太符合预期。反思了一下,首先是因为春节前后的工作排期异常紧张,没多少精力去学习新东西;其次是因为春节前后放飞了自己,耽搁了持续学习的进程;最后,系列的第一篇文章最难写,希望能够在足够入门的同时对方法体系有大概认知,但又不能太深,所以虽然已经看了很多内容,但始终找不到一个比较合理的行文框架,导致迟迟没有动笔。

本周二的时候,有粉丝找我催更鲁棒优化的内容。想到自己的因果推断入门文章还没完成,紧迫感一下子就上来了。所以,这两天加班加点,先把这个完成了。

正文见下。

2 相关关系 VS 因果关系

因果推断中有一句非常著名的话:相关关系不等于因果关系。在正文的开头,先来梳理一下什么是相关关系和因果关系。

2.1 相关关系

相关关系一般是指两个变量之间的相互关系,通常是一种统计意义上的关系:当两个变量一起增加或减少时,属于正相关关系(a图);当一个变量随着另一个变量的增加而较少时,属于负相关关系(b图);当一个变量对另一个变量的增加或减少无动于衷时,认为是没有相关关系(c图)。

统计学中,一般使用相关系数来量化相关关系。常见的相关系数有:Pearson相关系数、Spearman等级相关系数和Kendall等级相关系数。工业界最常用的是Pearson相关系数,下面我们来着重理解一下这个相关系数。

假设有两个变量 X X X Y Y Y,他们之间的Pearson相关系数的数学表达式为
ρ X , Y = C o v ( X , Y ) σ X σ Y = E [ ( X − μ X ) ( Y − μ Y ) ] σ X σ Y \rho_{X,Y}=\frac{Cov(X,Y)}{\sigma_X \sigma_Y}=\frac{E[(X-\mu_X)(Y-\mu_Y)]}{\sigma_X \sigma_Y} ρX,Y=σXσYCov(X,Y)=σXσYE[(XμX)(YμY)]
式中, C o v Cov Cov表示协方差, μ \mu μ表示均值, σ \sigma σ表示方差。上面这个公式不太好理解,我们用分量的形式重写一下
ρ X , Y = ∑ i = 1 N ( x i − μ x ) ( y i − μ Y ) ∑ i = 1 N ( x i − μ X ) 2 ⋅ ∑ i = 1 N ( y i − μ Y ) 2 \rho_{X,Y} = \frac{\sum_{i=1}^N(x_i-\mu_x)(y_i-\mu_Y)}{\sqrt{\sum_{i=1}^N(x_i-\mu_X)^2}·\sqrt{\sum_{i=1}^N(y_i-\mu_Y)^2}} ρX,Y=i=1N(xiμX)2 i=1N(yiμY)2 i=1N(xiμx)(yiμY)
定义: x i ′ = x i − μ x , y i ′ = y i − μ y x_i'=x_i-\mu_x,y_i'=y_i-\mu_y xi=xiμx,yi=yiμy,上式变为
ρ X , Y = ∑ i = 1 N x i ′ y i ′ ∑ i = 1 N x i ′ 2 ⋅ ∑ i = 1 N y i ′ 2 = X ′ Y ′ ∣ X ′ ∣ ∣ Y ′ ∣ = cos ⁡ ( X ′ , Y ′ ) \rho_{X,Y}=\frac{\sum_{i=1}^N x_i'y_i'}{\sqrt{\sum_{i=1}^N x_i'^2}·\sqrt{\sum_{i=1}^N y_i'^2}}=\frac{X'Y'}{|X'||Y'|}=\cos(X',Y') ρX,Y=i=1Nxi′2 i=1Nyi′2 i=1Nxiyi=X∣∣YXY=cos(X,Y)
所以,Pearson相关系数可以理解为:将原向量 X X X Y Y Y做中心化之后的新向量 X ′ X' X Y ′ Y' Y间夹角的余弦值。有了这层理解,便可知,Pearson相关系数值的范围是 [ − 1 , 1 ] [-1,1] [1,1]

下图展示了不同Pearson相关系数值时的变量分布情况。

2.2 因果关系

与相关关系相比,因果关系区分了原因变量和结果变量。借助自然科学研究的思路来定义因果关系,即假设存在两个变量 X X X Y Y Y,在控制能影响 Y Y Y的一切其他变量保持不变的同时,改变 X X X的状态,观察 Y Y Y是否随之发生改变。如果 Y Y Y发生了改变,那么则称 X X X Y Y Y的原因, Y Y Y X X X的结果, X X X Y Y Y之间具有因果关系。

工业界一般习惯使用uplift去表征 X X X Y Y Y之间量化的因果效应,从因果关系的定义上可以推导出

uplift = E ( Y ∣ X = 1 ) − E ( Y ∣ X = 0 ) \text{uplift}=E(Y|X=1)-E(Y|X=0) uplift=E(YX=1)E(YX=0)

显然,该值越大,他们之间的因果关系越强。

直观上来看, X X X Y Y Y的相关关系描述的是“ Y Y Y X X X的变化而变化的趋势”; X X X Y Y Y的因果关系研究的是“有X时的Y”和“没有X时的Y”之间的差值。

为了更直观地展示他们之间的差异,我们举个广告中的实例,如下表所示。此处, X X X对应的是广告, Y Y Y对应的是商品转化率。如果研究广告和商品转化率之间的相关关系,一般指的是看过广告后的的商品转化率,此时第2批用户的相关系数值更大(2%);但如果研究广告和商品转化率之间的因果关系,一般指的是因为广告而导致的商品转化率,此时第1批用户的uplift值更高(0.9%)。

用户批次有广告时的平均商品转化率无广告时的平均商品转化率uplift
11%0.1%0.9%
22%1.5%0.5%

事实上,如果仅能选取一批人进行广告投放,那么最佳的策略显然是将广告投放给因果关系更强的第一批用户。而这也是研究因果关系的价值之一:它可以为我们的最优决策提供理论基础

2.3 相关关系不等于因果关系

上一节的广告实例已经直观地告诉了我们,相关关系和因果关系研究的内容是有差异的。即便如此,我们还是希望能使用相关关系代表因果关系。这是因为,相关关系更直观,而且作为一个统计指标,可以使用很多成熟的数学方法对其进行量化。

为此,我们有必要知道,哪些情况会导致相关关系和因果关系不对等。最容易想到的一种情况是:样本有选择性偏差。如果研究中使用的样本并不能充分代表整个总体,那么研究的结论就可能偏离真实情况。特别地,如果将对撞子作为划分样本的变量,就可能导致得到相关关系和真正的因果关系不一致。此处,对撞子指的是原因变量和结果变量共同的结果。

举个例子,我们想研究饮食健康和作息规律程度之间的因果关系。如果选择健康人群,两个变量相对比较均衡,可能会没有显著的因果关系;但如果选择患病人群,那么可能会发现,如果饮食健康,那么作息就不规律;如果作息规律,那么饮食就不健康,即两个变量间存在负相关关系。这种情况下,选择不同的人群,便得到了不同的相关关系,但真正的因果关系只有一个,由此可能导致了相关关系和因果关系的不一致。

另一种导致相关关系和因果关系不对等的情况稍微复杂:夹杂了混杂因子。混杂因子指的是既影响原因变量也影响结果变量的变量。举个例子,我们想研究作息规律程度与肠胃疾病患病率之间的相关关系和因果关系。样本的散点图如下图黑色圆点所示。

从整体的相关关系来看,患病率和作息规律程度是呈明显的正相关关系(红色箭头),但是如果我们直接给出“作息规律程度的提升会导致患病率提升”的因果关系结论,显然是和我们的常识相悖的。这就是因果推断中辛普森悖论的一个实例。

出现该悖论的原因是存在混杂因子:年龄。一方面,年龄越大,人们越重视作息,规律性越强;另一方面,年龄越大,身体机能越差,患病率也会提升。

这种情况下,如果想探查出真正的因果关系,就需要去除混杂因子:将样本限定在同一个年龄段内。此时我们发现,无论在哪个年龄段,作息越规律,患病率都会越低(绿色箭头),因此可以得到结论:规律的作息有助于降低患病率。

3 因果推断方法

3.1 方法体系

既然不能直接用相关关系替代因果关系,那么就需要单独的方法去做因果推断。

我翻阅了一些书籍,感觉有本书针对因果推断的方法论体系的描述很容易让人理解:《因果推断:原理解析与应用实践》。

本节将参考该书中使用的因果推断方法体系,来描述因果推断的各类方法,并增加一些实例来加深对这些方法的认知和理解,具体如下图所示。

(1)试验场景:完全随机对照试验中,没有混杂因子也没有样本选择偏差,此时设置实验组的原因变量 X = 1 X=1 X=1,对照组 X = 0 X=0 X=0,再计算实验组和对照组的结果变量之差,就可以得到uplift值,它是量化因果关系的黄金标准;类随机对照试验中,会将试验数据通过差分、组合等方式将原始数据还原成完全随机对照试验的情况。

(2)非实验场景:潜在结果模型中,不需要再做试验,而是根据已经观测到的数据通过一些计算直接得到uplift,是一种可以得到因果关系结论的理想模式;结构因果模型中,使用有向图来建模变量间的因果关系。

3.2 方法理解

完全随机对照试验,很容易理解,不需要赘述;类随机对照试验中的双重差分法,我此前已经写过两篇文章,双重差分法(DID):算法策略效果评估的利器和双重差分法:标准化流程和stata代码实现,其他方法后面学习的时候再详细介绍。

潜在因果模型可以用下表来理解。针对特定用户,我们实际上只能观察到其中一条数据,但要计算uplift值,就必须同时知道两条数据。在潜在因果模型中,会使用机器学习的方法,把未观测到的另一条数据给预测出来。至于如何让预测的结果可靠,后面学习的时候再详述(关于机器学习的原理,可以参考:运筹视角下,体系化学习机器学习算法原理的实践和总结)。

用户有广告时的商品转化率无广告时的商品转化率uplift
11%1-?
21.5%?-1.5%

关于结构因果模型的理解,我们也举个实例。下表是一个关于新药物是否可以降低心脏病发作的实验数据,其中分子是心脏病不发作的数量,分母是对应组别下的总人数。限定性别时,我们发现服药组不发作的概率均高于对照组;不管性别直接看总数时,我们却发现服药组不发作的概率低于对照组。事实上,这还是个辛普森悖论的实例。

服药组未服药组
男性81/87=0.93234/270=0.87
女性192/263=0.7355/80=0.69
总数273/350=0.78289/350=0.83

为了确定新药物是否可以降低心脏病发作,结构因果模型的推演过程包含三步:关联、干预和反事实推断。

第一步,关联:从原表可以看出,心脏病发作的概率同时受性别和是否服用药物影响,是否服用药物也受性别影响,所以因果图如左下图所示(干预前)。此处,节点通过有向边连接到一个或多个与其有因果关系的其他节点,有向边则反映了因果关系的方向。

第二步,干预:我们让所有人都服用药物 X = 1 X=1 X=1,以及所有人都不服用药物 X = 0 X=0 X=0。此时,性别已经不再影响是否服用药物,所以因果图变成右上图(干预后)。

第三步,反事实推断:分别计算两种干预情况下,心脏病不发作的概率。
P ( Y = 1 ∣ X = 1 ) = P ( Y = 1 ∣ X = 1 , Z = 1 ) P ( Z = 1 ) + P ( Y = 1 ∣ X = 1 , Z = 0 ) P ( Z = 0 ) = 0.93 × 87 + 270 87 + 270 + 263 + 80 + 0.73 × 263 + 80 87 + 270 + 263 + 80 = 0.83 P(Y=1|X=1)=P(Y=1|X=1, Z=1)P(Z=1)+P(Y=1|X=1, Z=0)P(Z=0)=0.93\times\frac{87+270}{87+270+263+80}+0.73\times\frac{263+80}{87+270+263+80}=0.83 P(Y=1∣X=1)=P(Y=1∣X=1,Z=1)P(Z=1)+P(Y=1∣X=1,Z=0)P(Z=0)=0.93×87+270+263+8087+270+0.73×87+270+263+80263+80=0.83
P ( Y = 1 ∣ X = 0 ) = P ( Y = 1 ∣ X = 0 , Z = 1 ) P ( Z = 1 ) + P ( Y = 1 ∣ X = 0 , Z = 0 ) P ( Z = 0 ) = 0.87 × 87 + 270 87 + 270 + 263 + 80 + 0.69 × 263 + 80 87 + 270 + 263 + 80 = 0.78 P(Y=1|X=0)=P(Y=1|X=0, Z=1)P(Z=1)+P(Y=1|X=0, Z=0)P(Z=0)=0.87\times\frac{87+270}{87+270+263+80}+0.69\times\frac{263+80}{87+270+263+80}=0.78 P(Y=1∣X=0)=P(Y=1∣X=0,Z=1)P(Z=1)+P(Y=1∣X=0,Z=0)P(Z=0)=0.87×87+270+263+8087+270+0.69×87+270+263+80263+80=0.78
上述两式是基于全概率公式推导出来的,它能用在此处的原因是:在干预后,性别和是否服用药物之间是相互独立的。细节原理不清楚没关系,后面详细学习的时候应该还会再说,此处有个大致印象就行。

由于 P ( Y = 1 ∣ X = 1 ) P(Y=1|X=1) P(Y=1∣X=1)大于 P ( Y = 1 ∣ X = 0 ) P(Y=1|X=0) P(Y=1∣X=0),所以可以得到结论:新药物有利于提升心脏病不发作的概率。

4 运筹从业者也需要因果推断

关于因果推断的入门内容,到这里其实已经结束了。

但,作为运筹优化方向的算法工程师,为什么要学习因果推断,还是没有充分阐述。

接下来我们将通过一个行业实践的案例:DiDi Food中的智能补贴实战漫谈,来讲解因果推断是如何与运筹优化相结合来解决业务问题的。

4.1 问题描述

这个案例的基本背景是:业务方DiDi Food是一个外卖平台,它们希望通过对用户做差异化定价,提升某些指标。

针对任意一件商品,用户看到的最终价格 P P P通过下述公式计算得到
P = P i + P d − S c P=P_i+P_d-S_c P=Pi+PdSc

其中, P i P_i Pi为菜品标价(商品侧), P d P_d Pd为配送费(骑手侧), S c S_c Sc为C端补贴(用户侧)。

作为一个平台,DiDi Food很难拥有菜品价格的定价权,在设置配送费时也会尽量不使用用户维度的特征,以避免出现大数据杀熟的现象,所以最终确定以 S c S_c Sc为主要抓手,通过给不同用户发放不同类型的补贴,动态调整 P P P值,目标是最大化如下指标
R O I = 指标 Y 干预 − 指标 Y 不干预 补 贴 干预 − 补 贴 不干预 ROI=\frac{指标Y_{干预}-指标Y_{不干预}}{补贴_{干预}-补贴_{不干预}} ROI=干预不干预指标Y干预指标Y不干预
R O I ROI ROI可以理解为单位补贴成本带来的指标 Y Y Y的增量收益,所以该值越大越好。

4.2 算法方案

针对以上问题,算法方案包括两个步骤:(1)分析用户对补贴的敏感性并进行量化;(2)基于量化的敏感度值和业务约束,做补贴的最佳分配。

先看第一步。一般来说,可以定性的把用户分为如下四种:(1)自然转化:有没有补贴都会下单;(2)补贴敏感:没有补贴就不下单,有补贴才会下单;(3)反作用:没有补贴时会下单,有补贴反而不会下单;(4)无动于衷:有没有补贴都不会下单。

基于最朴素的认知也很容易得到如下结论:如果要最大化 R O I ROI ROI,应该把补贴发放给补贴敏感的用户,其他用户就不用补贴了。

不过,即使都是补贴敏感的用户,他们对补贴敏感的程度也是有差异的。为了对这些人群也做区分,我们就需要量化用户对补贴的敏感度uplift。下表给出了一些实例。

用户无补贴下单概率有补贴下单概率uplift备注
1000无动于衷
20.50.550.05补贴敏感度次之
30.50.4-0.1反作用
40.20.20自然转化
500.50.5补贴最敏感

然后再看第二步。假设目前有10个用户,有3种补贴券,分别都有1张。那么针对每种补贴券,每个用户都会有一个对应的uplift。此时的问题可以转化为:如何为每个用户分配一种补贴券,从而最大化总的uplift值。

这是个标准的整数规划问题,可以建模如下
max ⁡ ∑ i = 1 10 ∑ j = 1 3 x i j ⋅ u i j s.t ∑ i = 1 10 x i j = 1 , j = 1 , 2 , 3 ∑ i = 1 10 ∑ j = 1 3 x i j ⋅ w j ≤ W x i j ∈ { 0 , 1 } \max \quad \sum_{i=1}^{10}\sum_{j=1}^3 x_{ij}·u_{ij} \\ \text{s.t} \quad \sum_{i=1}^{10}x_{ij}=1, j=1,2,3 \\ \sum_{i=1}^{10}\sum_{j=1}^3 x_{ij}·w_j ≤W \\ x_{ij}\in \{0,1\} maxi=110j=13xijuijs.ti=110xij=1,j=1,2,3i=110j=13xijwjWxij{0,1}
此处, x i j x_{ij} xij表示是否对用户 i i i发放第 j j j种补贴券,值为1时表示发放,值为0时表示不发放; u i j u_{ij} uij表示用户 i i i对第 j j j种补贴券的uplift; w j w_j wj表示第 j j j种券的补贴金额; W W W表示允许的最大补贴额。

4.3 算法验证

假设线上正在运行的是基于人工经验设计的补贴方案B,我们也开发完成了上述的算法方案A。目前需要验证A是否显著优于B,如果是,后续便可以替换B为A。

验证的方法是做线上实验:选取3组几乎相同的人群,分别定义为:实验组、对照组和空白组,它们使用的补贴方案分别为:A、B和无补贴。

经过一段时间的实验后,回收三组对应的指标 Y Y Y及其对应的补贴金额,便可以通过计算和对比实验组的 R O I ROI ROI和对照组的 R O I ROI ROI值,得到A是否显著优于B的结论。

从前文的描述可以看出,算法方案中的第二个步骤属于运筹优化内容,而算法方案中的第一个步骤和算法验证模块均属于因果推断的内容。所以,在实际工作中如果想要解决好这类业务问题,很难避开因果推断。

5 总结

本文稍微有些长,最后再总结一下:

(1)相关关系不等于因果关系,出现不对等的原因可能是:样本有选择性偏差、有混杂因子;相关关系使用Pearson相关系数去量化,因果关系使用uplift去量化。

(2)因果推断的方法分为两大类:试验场景和非试验场景,试验场景中包含完全随机对照试验和类随机对照试验;非试验场景分为潜在因果模型和结构因果模型。

(3)运筹从业者也需要因果推断。

6 相关阅读

赵永贺等编著.因果推断:原理解析与应用实践[M], 北京: 电子工业出版社, 2023:https://weread.qq.com/web/bookDetail/813326f0813ab873fg015d1a

因果推断(一):因果推断两大框架及因果效应:https://zhuanlan.zhihu.com/p/652174282

DiDi Food中的智能补贴实战漫谈:https://mp.weixin.qq.com/s/WU1iILMFdH3RZAbJKFU4WA

皮尔逊相关系数的几何理解:https://oychao.github.io/2016/05/18/statistics/03_pearsons_r/

因果推理初探(4)——干预:https://zhuanlan.zhihu.com/p/111340526

动手学因果推断】(二):潜在因果框架:https://blog.csdn.net/weixin_45052363/article/details/129842753

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1506736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音在线点赞任务发布接单运营平台PHP网站源码多个支付通道+分级会员制度,附带系统搭建教程

介绍 1、三级代理裂变,静态返佣/动态返佣均可设置。(烧伤制度)。 2、邀请二维码接入防红跳转。 3、自动机器人做任务,任务时间可设置,机器人价格时间可设置。 4、后台可设置注册即送X天机器人。 5、不同级别会员使…

浅谈JUC的理解(含JUC知识体系图)

浅谈JUC的理解 一、前言感悟二、并发知识三、一年前回答四、补充体系回答五、补充层次回答六、碎碎念 本文除了说技术,更多的是在一个两年多开发经验的程序员视角下,记录下自己探索到的世界。 如有不妥之处,还请指正。共勉。 一、前言感悟 当…

上海雷卯湿敏元器件存储及使用规范

湿敏等级是指材料或产品对湿度变化的敏感程度。它用于评估材料或产品在湿度变化条件下的稳定性和可靠性。 湿敏等级通常通过数字表示(如MSL- Moisture Sensitivity Level),从1到6级不等,每个级别代表不同的湿敏程度。较低的级别表…

基于网络爬虫的购物平台价格监测系统的设计与实现

通过对网络爬虫的购物平台价格监测系统的业务流程进行梳理可知,网络爬虫的购物平台价格监测系统主要由前台买家模块、后台卖家模块以及管理员模块构成。前台功能包含登录功能、注册功能、系统首页功能、唯品会商品详情浏览、唯品会商品收藏、唯品会商品点赞、唯品会…

9. 内核、文件系统加载工具

内核、文件系统加载工具 内核、文件系统加载工具是嵌入式开发必备的工具 1. 烧写BootLoader 1.1 通过超级终端方式 烧写 Bootloader 可以使用超级终端的“传送” |“发送文件”命令进入发送文件对话框,使用 Xmodem 协议和 Kermit 协议发送 Bootloader 的各个文件…

DenseNet笔记

📒from ©实现pytorch实现DenseNet(CNN经典网络模型详解) - 知乎 (zhihu.com) 是什么之 DenseBlock 读图: x0是inputH1的输入是x0 (input)H2的输入是x0和x1 (x1是H1的输出) Summary: 传统卷积网,网…

角蜥优化算法 (Horned Lizard Optimization Algorithm ,HLOA)求解无人机路径优化

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。 二、算法介…

python学习笔记------集合(set)

集合定义格式 基本语法: #定义集合字面量 {元素,元素,元素......,元素} #定义集合变量 变量名称{元素,元素,元素......,元素} #定义空集合 变量名称set() #定义集合字面量 {元素&#…

海纳斯Hinas安装Tailscale

海纳斯Hinas安装Tailscale 海纳斯安装Tailscale第一步,注册Tailscale账号,并在手机/电脑安装Tailscale第二步,进入海纳斯后台卸载重装Tailscale 海纳斯安装Tailscale 海纳斯自己安装了Tailscale,但是无法使用,需要卸载…

GPU,一统天下

三十年前,CPU 和其他专用处理器几乎处理所有计算任务。那个时代的显卡有助于加快 Windows 和应用程序中 2D 形状的绘制速度,但没有其他用途。 快进到今天,GPU 已经成为业界最具主导地位的芯片之一。 但具有讽刺意味的是,图形芯片…

系统分析与设计(一)

我们有这么多各式各样的工具,互联网给我们带来了这么多用户和数据,这是好事也有副作用。 世界上能访问用户数据,并根据数据做分析和改进的公司,大概Google是其中翘楚,这种 data-centric 的做法做过了头,也有悲剧发生: Douglas Bowman 曾经是Google 的视觉设计主管,2009年的一天…

2013-2021年全国31省电子商务销售额数据(无缺失)

2013-2021年全国31省电子商务销售额数据(无缺失) 1、时间:2013-2021年 2、指标:电子商务销售额数据 3、来源:国家TJ局、各省NJ 4、范围:31省 5、缺失情况:无缺失 6、指标解释:…

JavaScript高级Ⅱ(全面版)

接上文 JavaScript高级Ⅰ JavaScript高级Ⅰ(自认为很全面版)-CSDN博客 目录 第2章 DOM编程 2.1 DOM编程概述 2.1.4 案例演示(商品全选) 2.1.5 dom操作内容 代码演示: 运行效果: 2.1.6 dom操作属性 代码演示: 运行效果: 2…

程序设计基础--C语言【一】

课堂笔记 1.整数数制 整数数制包括二进制数、八进制数、十进制数、十六进制数 1.1.十进制数 基数为10,由0到9这十个数构成。例如,4261可以看作是: (4*1000)(2*100)(6*10&#x…

最简单的电子书制作方法

制作电子书的方法有很多种,但最简单的一种可能就是使用在线工具了。现在有很多免费的在线工具可以让您轻松地创建电子书,而无需任何编程或设计技能。以下是最简单的电子书制作方法: 1. 准备好制作工具:FLBOOK在线制作电子杂志平台…

内存管理 --- 页面置换算法

最优置换:(参照未来OPT) 可以将将来很长一段时间不会访问的逻辑页面,进行置换 举例说明: 首先物理空间只有4个,然后遍历了ABCD 页,其中,要访问5 e 了但是没有,即发生缺页…

登录凭证------

为什么需要登录凭证? web开发中,我们使用的协议http是无状态协议,http每次请求都是一个单独的请求,和之前的请求没有关系,服务器就不知道上一步你做了什么操作,我们需要一个办法证明我没登录过 制作登录凭…

【LLM】Advanced rag techniques: an illustrated overview

note 文章目录 noteAdvanced rag techniques: an illustrated overview基础RAG高级RAG分块和向量化(Chunking & Vectorisation)搜索索引(Search Index)1. 向量存储索引(Vector Store Index)2. 多层索引(Hierarchical Indices)3. 假设问题和HyDE(Hypo…

【笔记】全国大学生GIS应用技能大赛练习总结

该总结笔记为小组成员在练习完毕了历届题目后自我总结的结果,如有不足之处可以在评论区提出,排版较乱往谅解 绘制带空洞的面要素: 法一: 1、矢量化整个区域。2、矢量化空洞区域。3、将矢量化空洞区域进行合并(编辑器…

Linux之selinux详解

华子目录 概念作用selinux与传统的权限区别selinux工作原理名词解释主体(subject)目标(object)策略(policy)(多个规则的集合)安全上下文(security context) 文…