AB试验(三)一次试验的规范流程

AB试验(三)一次试验的规范流程

一次完整且规范的A/B试验可参考下图:

4

确定目标和假设

  • 核心:A/B测试是因果推断,所以我们首先要确定原因和结果。目标决定了结果,而假设又决定了原因。

  • 如何确定

    • 分析问题,确定想要达到的结果(目标)
    • 其次,提出解决业务问题的大致方案
    • 最后,从大致解决方案中提取具体的假设(假设)

确定指标

指标类型

  • 评价指标(Evaluation Metrics):能驱动公司实现核心价值的指标。通常是短期的、比较敏感、有很强的可操作性,例如点击率、转化率、人均使用时长等
  • 护栏指标(Guardrail Metrics):衡量A/B测试是否符合业务上的长期目标,不会因为优化短期指标而打乱长期目标。例如退订率、用户体验等

评价指标的选取标准

  • 可归因性:业务改动能引发指标变化

  • 可测量性:指标的变化是易于统计量化的

  • 敏感性与稳定性:如果实验中的变量变化了,评价指标要能敏感地做出相应的变化;但如果是其他因素变化了,评价指标要能保持相应的稳定性。

    • 长期与短期指标:检测单次的变化时(比如单次推送/邮件)一般选用短期效果指标,因为长期效果目标通常对单次变化并不敏感。检测连续的、永久的变化时(比如增加产品功能),可以选用长期效果的指标
    • A/A测试测量稳定性:如果A/A测试的结果发现两组的指标有显著不同,那么就说明要么分组分得不均匀,每组的数据分布差异较大;要么选取的指标波动范围太大,稳定性差。
    • 回溯性分析来表征敏感性:回溯历史数据,其他的变动(非本次试验改动)是否会引起该指标的明显变化。
  • 如何选取

    • 历史经验:依据业务/产品所处阶段,例如起步阶段的拉新点击率转化率等;发展与成熟阶段的平均使用时间平均使用频率留存率等。
    • 目标抽象,可采用定性+定量的方法:例如用户满意度,可通过用户调研进行用户满意与不满意的分组,并计算一些指标,找出具有明显相关的指标进行替代借鉴
    • 其他试验或网络公开试验的相关指标
    • 构建总体评价标准OEC(Overall Evaluation Criteria)

    亚马逊推送电子邮件的案例:

    • 在实验组给用户发邮件,在对照组不给用户发邮件。起初的评级指标为收入,结果可想而知,实验组发的邮件越多,收入越高。但现实情况是用户收到一定程度的邮件后就会觉得是垃圾邮件,影响了用户体验而选择了退订,因此会带来预期之外的损失。
    • 构建 O E C = ∑ i R e v e n u e − S ∗ U n s u b s c r i b e l i f e t i m e l o s s n OEC=\frac{\sum_i Revenue − S ∗ Unsubscribe_lifetime_loss}{n} OEC=niRevenueSUnsubscribelifetimeloss,i代表每一个用户,Revenue代表每组退订的人数,Unsubscribe_lifetime_loss代表用户退订邮件带来的预计损失,n代表每组的样本大小。
    • 实施OEC后,发现有一半以上电子邮件的OEC都是负的,说明多发邮件并不是总能带来正收益

    优点:综合各方面的指标才能把握总体的好处;避免多重检验问题

    ⚠️注意:当多个指标单位、大小不在一个尺度上时,需要进行归一化处理

  • 衡量评价指标的波动性

    • 根据统计公式计算:置信区间=样本均值 ± \pm ±z分数*标准误差

      • 当样本量足够大时,数据服从正态分布,因此可采用z分数,一般我们选取95%的置信区间,对应的z分数为1.96
      • 概率类指标标准误: S E = p ( 1 − p ) n SE=\sqrt{\frac{{p}(1-{p})}{n}} SE=np(1p)
      • 均值类指标标准误: S E = s 2 n = ∑ ( x i − x ˉ ) 2 n ( n − 1 ) SE=\sqrt\frac{s^2}{n}=\sqrt{\frac{\sum(x_i-\bar{x})^{2}}{n(n-1)}} SE=ns2 =n(n1)(xixˉ)2
    • 经验法则:一些复杂指标不符合正态分布

      • A/A测试:跑多个不同样本大小的A/A测试,然后分别计算每个样本的指标大小,计算出来后,再把这些指标从小到大排列起来,并且去除最小2.5%和最大2.5%的值,剩下的就是95%的置信区间
      • Bootstrapping算法:先跑一个样本很大的A/A测试,然后在这个大样本中进行随机可置换抽样(Random Sample with Replacement),抽取不同大小的样本来分别计算指标。然后采用和A/A测试一样的流程:把这些指标从小到大排列起来,并且去除最小2.5%和最大2.5%的值,得到95%的置信区间。实际中更流行使用Bootstrapping算法,因此一些传统简单的指标也可以用该方法计算后与传统公式进行比较,如果差距较大则需要跑更多的A/A测试进行验证

护栏指标

  • 业务品质层面:是在保证用户体验的同时,兼顾盈利能力和用户的参与度
    • 网络延迟:网页加载时间、app响应时间等
    • 闪退率
    • 盈利能力:人均花费、人均利润等
    • 用户参与度/满意度:人均使用时长、人均使用频率等
  • 统计品质层面:统计方面主要是尽可能多地消除偏差,使实验组和对照组尽可能相似,比如检测两组样本量的比例,以及检测两组中特征的分布是否相似
    • 实验/对照组中样本大小的比例
    • 实验/对照组中样本特征的分布

确定实验单位

  • 三个维度

    • 用户层面:把单个的用户作为最小单位,也就是以用户为单位来划分实验组和对照组。常见的如:用户ID、匿名ID(cookies)、设备ID、IP地址。准确度上,用户ID>匿名ID>设备ID>IP地址

    • 访问层面:每次访问作为最小单位,一个用户会有多个访问ID,所以该用户可能同时出现在实验组和对照组

    • 页面层面:每一个"新"页面作为最小单位,例如每次回到首页记做一次页面浏览ID

      • 三个维度之间的关系:一个用户可以有多个访问,一个访问可以有多个页面浏览,因此实验单位的颗粒度越来越细,获得的样本量也越来越多

      • 经验总结:访问层面和页面层面的单位,比较适合变化不易被用户察觉的A/B测试,比如测试算法的改进、不同广告的效果等等;如果变化是容易被用户察觉的,那么建议你选择用户层面的单位

  • 三大原则

    • 保证用户体验的连贯性:即A/B测试中的变化是用户可以察觉的,实验单位就需要选择用户层面
    • 实验单位要和评价指标的单位保持一致
    • 再保证前两个原则的前提下,样本要尽可能的多

样本量估算

合适的样本量

  • 样本量不是越多越好:时间成本+试错成本
    • A/B测试所需的时间=总样本量/单位时间获取样本量。当所需样本量越小,实验时间越短,实际业务场景中,时间是最宝贵的资源。
    • A/B实验中的改动也可能造成业务损害,因此需要一定的试错成本。当实验样本越小时,试错成本就会越低
  • 样本量的平衡:在A/B测试中,既要保证样本量足够大,又要把实验控制在尽可能短的时间内

样本量计算原理

  • 计算公式: n = ( Z 1 − α 2 + Z 1 − β ) 2 ( δ σ p o o l e d ) 2 = ( Z 1 − α 2 + Z p o w e r ) 2 ( δ σ p o o l e d ) 2 n=\frac{(Z_{1-{\frac{\alpha}{2}}}+Z_{1-\beta})^2}{(\frac{\delta}{\sigma_{pooled}})^2}=\frac{(Z_{1-{\frac{\alpha}{2}}}+Z_{power})^2}{(\frac{\delta}{\sigma_{pooled}})^2} n=(σpooledδ)2(Z12α+Z1β)2=(σpooledδ)2(Z12α+Zpower)2
    • Z 1 − α 2 Z_{1-{\frac{\alpha}{2}}} Z12α 1 − α 2 1-\frac{\alpha}{2} 12α对应的z分数, Z p o w e r Z_{power} Zpower为(power)对应的z分数,
    • δ \delta δ为实验组和对照组评价指标的差值
    • σ p o o l e d 2 \sigma_{pooled}^2 σpooled2为实验组和对照组的综合方差
  • 如何理解power
    • p o w e r = 1 − β power=1-\beta power=1β,即通过A/B测试探测到两者不同的概率
    • 可理解为A/B测试的灵敏度,power越大,越能探测到两组的不同
  • 样本量n的四个影响因素
    • 显著性水平 α \alpha α:显著水平 α \alpha α越小样本量越大(第一类错误越小,结果越精确,所需的样本量自然就越大)
    • 功效 p o w e r ( 1 − β ) power(1-\beta) power1β:功效power越大样本量越大(第二类错误越小,结果越精确,所需的样本量自然就越大)
    • 实验组和对照组的综合方差 σ p o o l e d 2 \sigma_{pooled}^2 σpooled2:综合方差越大样本量越大(综合方差越大,说明评价指标的波动范围越大,也越不稳定,那就更需要更多的样本来进行实验,从而得到准确的结果。)
    • 实验组和对照组评价指标的差值 δ \delta δ:差值 δ \delta δ越小样本量越大(因为实验组和对照组评价指标的差值越小,越不容易被A/B测试检测到,所以我们需要提高Power,也就是说需要更多的样本量来保证准确度)

实践中如何计算样本量

  • 参数默认设置:

    • 日常设置 α = 5 % \alpha=5\% α=5% p o w e r = 80 % power=80\% power=80%,所以 n ≈ 8 σ p o o l e d 2 δ 2 n \approx \frac{8\sigma_{pooled}^2}{\delta^2} nδ28σpooled2

    • 样本均分:只有两组均分,才能使两组的样本量均达到最大,并且使总样本量发挥最大使用效率,从而保证A/B测试更快更准确地进行。所以此时 n ≈ 2 ∗ 8 σ p o o l e d 2 δ 2 n \approx 2 * \frac{8\sigma_{pooled}^2}{\delta^2} n2δ28σpooled2

      非均分样本的缺点:

      • 在非均分的情况下,只有相对较小组的样本量达到最小样本量,实验结果才有可能显著,并不是说实验组越大越好,因为瓶颈是在样本量较小的对照组上
      • 准确度降低。如果保持相同的测试时间不变,那么对照组样本量就会变小,测试的Power也会变小,测试结果的准确度就会降低
      • 延长测试时间。如果保持对照组的样本量不变,那么就需要通过延长测试时间来收集更多的样本
  • 估算实验组和对照组评价指标的差值 δ \delta δ

    • 从收益和成本的角度进行估算:业务变动会带来一定的额外成本(包括不限于人力成本、时间成本、维护成本、机会成本等,也会带来一定的额外收益,因此可以计算指标至少提高多少才能使得净收益为正。
    • 通过历史数据计算评价指标的波动范围:置信区间=样本均值 ± \pm ±z分数*标准误差(同衡量评价指标的波动性),因此可以计算指标至少提高多少才能高出波动范围的最大值。
  • 计算实验组和对照组的综合方差 σ p o o l e d 2 \sigma_{pooled}^2 σpooled2

    • 概率类指标: σ p o o l e d 2 = p t e s t ( 1 − p t e s t ) + p c o n t r o l ( 1 − p c o n t r o l ) \sigma_{pooled}^2=p_{test}(1-p_{test})+p_{control}(1-p_{control}) σpooled2=ptest(1ptest)+pcontrol(1pcontrol)

      • p c o n t r o l p_{control} pcontrol为对照组中事件发生的概率,即在没有A/B实验下,通过历史数据计算得到。
      • p t e s t = p c o n t r o l + δ p_{test}=p_{control}+\delta ptest=pcontrol+δ δ \delta δ为上个步骤预估的差值
    • 均值类指标: σ p o o l e d 2 = 2 ∗ ∑ i n ( x i − x ˉ ) 2 n − 1 \sigma_{pooled}^2=\frac{2*\sum_{i}^{n}(x_i - \bar x)^2}{n-1} σpooled2=n12in(xixˉ)2

      • n为所取历史数据样本的大小
      • x i x_i xi为所取历史数据样本中第i个用户的使用时长/购买金额等均值类指标
      • x ˉ \bar x xˉ为所取历史数据样本中用户的平均使用时长/购买金额等
    • 示例:优化app某一功能,提高用户注册率。计算所需的样本量

      • 通过收益成本角度,估算 δ 收支平衡 = 8.2 % \delta_{收支平衡}=8.2\% δ收支平衡=8.2%
      • 通过概率类指标计算 σ p o o l e d 2 = p t e s t ( 1 − p t e s t ) + p c o n t r o l ( 1 − p c o n t r o l ) \sigma_{pooled}^2=p_{test}(1-p_{test})+p_{control}(1-p_{control}) σpooled2=ptest(1ptest)+pcontrol(1pcontrol)。其中已知当前注册率约为60%,则 p t e s t = 60 % + 8.2 % = 68.2 % p_{test}=60\%+8.2\%=68.2\% ptest=60%+8.2%=68.2%。代入得 σ p o o l e d 2 = 0.46 \sigma_{pooled}^2=0.46 σpooled2=0.46
      • n ≈ 8 ∗ 0.46 0.08 2 2 ≈ 548 n \approx \frac{8*0.46}{0.082^2} \approx 548 n0.082280.46548,实验组与对照组样本量一致,则总样本为1096

随机分组

  • 实验分组的要求:在同一时间维度下,让组成成分相似的用户群参与到两组实验

    • 定义:具体表现就是每个指标在AB两组中要均衡,一个好的办法是通过马氏距离来定义相似性: d ( G 1 , G 2 ) = ( x ˉ 1 − x ˉ 2 ) T Σ ^ − 1 ( x ˉ 1 − x ˉ 2 ) d(G_1, G_2)=(\bar{x}_1-\bar{x}_2)^T \hat{\Sigma}^{-1}(\bar{x}_1-\bar{x}_2) d(G1,G2)=(xˉ1xˉ2)TΣ^1(xˉ1xˉ2)
    • 原因:只有排除其他协变量对实验的影响,实验差异才能归因于测试变量的差异
    • 如何实现样本相似
      • 随机化:界普遍使用完全随机分组法(Complete Randomization,CR),即对用户ID字段进行哈希后对100取模,得到一个结果值,再将结果值相同的用户分入同一个桶
      • AA测试规避:不加策略对两组用户进行实验空跑,观察基准指标是否显著差异。若存在差异,则重新分组再重跑实验,直至基准指标基本一致
      • RR(Rerandomization):即在每次CR分组之后, 验证CR的分组结果组间差异是否小于实验设定阈值(例如0.1),相对于CR而言, RR是通过牺牲计算时间, 进行分组尝试.。相当于AA测试的工程自动化
      • 自适应分组算法(Adaptive):相比于传统的CR分组,Adaptive分组的算法更加复杂,在遍历人群进行分组的同时,每个组都需要记录目前为止已经分配的样本数,以及已经分配的样本在选定的观测指标上的分布情况。
    • 实验结果差异的要求:假设A组的结果为 r 1 r_1 r1,B组的结果为 r 2 r_2 r2,则AB测试的差异为 δ = r 1 − r 2 \delta=r_1-r_2 δ=r1r2 δ \delta δ为依赖测试样本的随机变量。应该满足以下特性:
      • 无偏性:假设在1%流量上某功能可以提高10%的点击率,那么在全量上也应该大约提高10%
      • 低方差:方差越小,可靠性越高
  • 实验分组方式:利用分层和分流的机制保证本站的流量高可用

    • 原因:流量是有限且宝贵的;实验对象是多层的或者同一层内互不干扰的;AB测试的需求是大量的

    • 正交实验:每个独立实验为一层,层与层之间流量是正交的,一份流量穿越每层实验时,都会再次随机打散,且随机效果离散。流量正交让业务关联度很小的实验有足够的流量同时进行(实现流量的高可用)

      6

    • 互斥实验:实验在同一层拆分流量,且不论如何拆分,不同组的流量是不重叠的。流量互斥让业务关联度较大的实验流量分开,避免干扰,保证实验结果的可信度。

      7

    • 分层分流规则

      8

      规则详述:

      • 流量从上往下流过分流模型
      • 域1和域2拆分流量,此时域1和域2是互斥的
      • 流量流过域2中的B1层、B2层、B3层时,B1层、B2层、B3层的流量都是与域2的流量相等。此时B1层、B2层、B3层的流量是正交的
      • 流量流过域2中的B1层时,又把B1层分为了B1-1,B1-2,B1-3,此时B1-1,B1-2,B1-3之间又是互斥的

      应用场景

      • 如果要同时进行UI优化、广告算法优化、搜索结果优化等几个关联较低的测试实验,可以在B1、B2、B3层上进行,确保有足够的流量
      • 如果要针对某个按钮优化文字、颜色、形状等几个关联很高的测试实验,可以在B1-1、B1-2、B1-3层上进行,确保实验互不干扰
      • 如果有个重要的实验,但不清楚当前其他实验是否对其有干扰,可以直接在域1上进行,确保实验结果准确可靠
  • 用户进入实验的简单流程

    9

测试时间的估算

  • AB实验所需时间=总样本量/单位时间能得到的样本量
  • 用户行为的周期性:大部分场景下,用户在周末与工作日的表现有明显差异,因此一次实现最少需要包含一周的时间

实施测试

  • 初始应同比例分配极小的流量,例如1%,观察试验是否正常运行,如果存在问题(包括不限于投诉陡升、退订退费陡升、未监测到功能改变、没上报埋点等),应该及时停止试验并回滚
  • 若上述未发现异常情况,则可开始正常增加流量。如果实验中发现实验组数据明显较差,应该及时停止试验并回滚
  • 一般性的,试验开始阶段置信区间都是非统计显著的,随着时间开始逐渐收敛。等到收集到所需样本且达到运行所需时间时。可以开始统计数据进行后续分析

分析测试结果

不要提前结束测试

  • 由于样本量是不断变化的,所以每次观测都可以算作一次实验。统计上,A/B测试一般有5%的第一类错误率 α \alpha α,也就是说每重复100次测试平均能得到5次错误的统计显著性结果。即存在多重检验问题
  • 提前观测到统计显著的结果,这就意味着样本量并没有达到事先估算的最小样本量,那么这个所谓的“统计显著的结果”就极有可能是错误的假阳性(False Positive)。即两组事实上是相同的,而测试结果错误地认为两组显著不同

保障统计品质的合理性检验

  • 检验实验/对照组的样本比例是否一致

    • 测试数据要么属于实验组,要么属于对照组,符合二项分布。如果流量等分,则进入实验组的概率为0.5
    • 根据二项分布的公式计算标准误差 S E = p ( 1 − p ) n SE=\sqrt{\frac{{p}(1-{p})}{n}} SE=np(1p) 。然后以进入实验组的概率为中心构造置信区间
    • 最后确认实际的实验组占总体样本比例是否在置信区间内,同理可计算对照组的。
    • 举个例子:在一次等流量测试中,实验组样本是315256,对照组样本是315174。由于等流量分组,因此样本进入实验组的概率 p = 0.5 p=0.5 p=0.5,则 S E = 0.5 ( 1 − 0.5 ) 315256 + 315174 = 0.06 % SE=\sqrt{\frac{{0.5}(1-{0.5})}{315256+315174}}=0.06\% SE=315256+3151740.5(10.5) =0.06%。则进入实验组的置信区间为 [ 0.5 − 1.96 ∗ 0.06 % , 0.5 + 1.96 ∗ 0.06 % ] = [ 49.88 % , 50.12 % ] [0.5-1.96*0.06\%, 0.5+1.96*0.06\%]=[49.88\%,50.12\%] [0.51.960.06%,0.5+1.960.06%]=[49.88%,50.12%]。进入对照组也如此。计算实际的实验组占比和对照组占比分别为50.01%、49.99%,都在置信区间内,因此该次实验的两组样本量的比例通过了合理性检验
  • 检验实验/对照组中特征的分布

    • 常用的特征包括:年龄、性别、地点、设备、活跃情况等信息
    • 特征分布合理性检验:卡方检验、KS检验、相对熵(KL散度、JS散度)、PSI
  • 检验不通过该怎么办

    • 产生的问题:实验/对照组样本量的比例和实验设计不相同时会出现样本比例不匹配问题(Sample Ratio Mismatch),实验/对照组的特征分布不相似则会导致辛普森悖论问题(Simpson Paradox)
    • 如何解决
      • 和工程师一起从实施的流程方面进行检查,看看是不是具体实施层面上两组有偏差或者bug。
      • 从不同的维度来分析现有的数据,看看是不是某一个特定维度存在偏差。常用的维度有时间(天)、操作系统、设备类型等。比如从操作系统维度,去看两组中iOS和Android的用户的比例是否存在偏差,如果是的话那说明原因和操作系统有关

如何分析A/B测试结果

  • p值法:当P值小于5%时,说明两组指标具有显著的不同。当P值大于5%时,说明两组指标没有显著的不同
  • 置信区间法:如果置信区间包括0的话,两组指标没有显著不同。而如果置信区间不包括0的话,两组指标是显著不同的

经验总结:一般地两种方法是等价的,取其一即可。如果需要考虑成本收益的话,建议选择置信区间法,且要求差值 δ \delta δ的置信区间范围要比收支平衡时计算的 δ 收支平衡 \delta_{收支平衡} δ收支平衡要大

总结

从确定目标和假设,到确定评价指标和护栏指标,到确定实验单位,到样本量估算,到随机分组,到测试时间的估算,到实施测试,到分析测试结果,每一步都有规范的操作,所以在日常中按照此步骤规范操作,不仅能防止误操作,还能定位误操作的原因。

共勉~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【适用于电力系统和音频系统】计算信号的总谐波失真 (THD)(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

深眸科技迭代深度学习算法,以AI机器视觉技术扩围工业应用场景

智能制造是制造业数智化转型升级的发展方向,在当前以高端装备制造为核心的工业4.0时代背景下,越来越多的制造企业意识到机器视觉对于提高效率、降低成本,从而提升企业效益的意义。 目前,机器视觉已成为制造业迈向智能制造过程中极…

激光焊如何更准更稳?维视智造激光焊视觉解决方案助力精密制造

激光焊接是一种高能密度、非接触的焊接技术,它利用激光束对工件进行加热和熔化,然后使其在熔池的情况下形成连接。与传统的焊接方法相比,激光焊具有高密度、熔深小、变形小、焊缝质量高、适用性广、自动化程度高等特点,可以实现焊…

【VisualStudio】NuGet包管理器下载缓存packages文件夹过大怎么清理

使用Visual Studio 开发工具时间长了,会发现整个项目的总大小越来越大,默认是存放在电脑系统盘里的,随着Windows11系统常常更新重启,导致系统盘闲置空间越来越小,该怎么办呢。 描述问题 整个解决方案项目会越变越大&…

JVM调优工具

JVM调优工具 Jmap 查看类信息 此命令可以查看内存信息,实例个数以及占用内存大小。 num:序号instances:实例数量bytes:占用空间大小class name:类名称,[C is a char[],[S is a short[]&#…

Powdersigner + PostgreSql 同步表结构到pg数据库

要用Powdersigner同步表结构到PostgreSql数据库, Powdersigner 版本是 16.5,当前模型是mysql的 1,修改当前模型内容为postgresql的 Database --> Change Current DBMS 选择PostgreSQL 最大版本的(因为Powdersigner内置版本一…

Python实现查询一个文件中的pdf文件中的关键字

要求,查询一个文件中的pdf文件中的关键字,输出关键字所在PDF文件的文件名及对应的页数。 import os import PyPDF2def search_pdf_files(folder_path, keywords):# 初始化结果字典,以关键字为键,值为包含关键字的页面和文件名列表…

chrome实用插件分享

colorzilla(网页取色器) 滴管取色 可以自动获取网页上任何像素或区域的颜色,也可以获取浏览器外部的颜色。 显示元素信息 显示元素的信息,如标签名称、类、id、大小等。 拾色器面板 类似Photoshop软件上的那些功能。 颜色历史…

Delft3D水动力与泥沙运动模拟

目录 第一部分 Delft3D水动力模型的基本原理 第二部分 构建Delft3D模型的基本流程 第三部分 构建Delft3D水动力模型的网格 第四部分 Delft3D水动力模型的运行和后处理 第五部分 Delft3D泥沙运动模型 第六部分 Delft3D泥沙运动模型举例与练习 第七部分 Delft3D泥沙模型进…

山西电力市场日前价格预测【2023-09-20】

日前价格预测 预测说明: 如上图所示,预测明日(2023-09-20)山西电力市场全天平均日前电价为334.70元/MWh。其中,最高日前电价为391.75元/MWh,预计出现在19: 15。最低日前电价为277.77元/MWh,预计…

如何使用IP归属地查询API来追踪网络活动

引言 在当今数字化世界中,了解网络活动的源头和位置对于网络安全、市场研究和用户体验至关重要。IP归属地查询API是一种强大的工具,可以帮助您追踪网络活动并获取有关IP地址的重要信息。本文将探讨如何使用IP归属地查询API来追踪网络活动,以…

基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据库

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1.HOG特征提取 2.GRNN神经网络 3.JAFFE表情数据库 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .....................................…

HI_NAS linux 记录

dev/root 100% 占用解决记录 通过下面的命令查看各文件夹 大小 sudo du --max-depth1 -h # 统计当前文件夹下各个文件夹的大小显示为M 最终发现Var/log 占用很大空间 发现下面两个 log 占用空间很大,直接 rm-rf 即可 HI NAS python3 记录 # 安装pip3 sudo apt u…

你真的知道GET和POST两种基本请求方法的区别吗?

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出…

Linux文件管理命令

Linux命令行 命令空格参数(可写可不写)空格文件(可写可不写)ls/opt 根目录下的opt文件夹ls-a 显示所有文件及隐藏文件/optls -l 详细输出文件夹内容 ls -h 输出文件大小(MB...)ls--full-time 完整时间格式输出ls-d 显示文件夹本身信息,不输出内容ls-t 根据最后修改…

怒刷LeetCode的第8天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:双指针和排序 ​编辑第二题 题目来源 题目内容 解决方法 方法一:双指针 方法二:递归 方法三:快慢指针 方法四:栈 第三题 题目来源 题目内容 解决方法…

SSM02

SSM02 此时我们已经做好了登录模块接下来可以做一下学生管理系统的增删改查操作 首先&#xff0c;我们应当有一个登录成功后的主界面 在webapp下新建 1.main.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…

天选之子C++是如何发展起来的?如何学习C++呢?

天选之子C是如何发展起来的&#xff1f;如何学习C呢? 一、什么是C二、C发展史三、C的重要性3.1 语言的使用广泛度3.2 在工作领域 四、如何学习C4.1 大佬怎么学&#xff1f;4.2 自己怎么学 一、什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复…

Echarts散点图筛选新玩法dataZoom

目录 前言 一、引入Echarts5.4.3 二、新建index.html 三、绑定Echarts展示元素 四、初始数据绑定 五、option设置 六、效果展示 七、参数说明 总结 前言 如果您在日常的工作当中也会遇到如下场景&#xff0c;需要在线对已经展示出来的图表进行进一步的筛选&#xff0c…

在编译源码的环境下,搭建起Discuz!社区论坛和WordPress博客的LNMP架构

目录 一.编译安装nginx 二.编译安装MySQL 三.编译安装PHP 四.安装论坛 五.安装wordpress博客 六.yum安装LNMP架构&#xff08;简要过程参考&#xff09; 一.编译安装nginx 1&#xff09;关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下 systemctl stop fire…