1. 如何利用sql计算次日留存率?
2. python中如何求两个集合的相同元素?
- 可以直接两个for循环,速度较慢
- 使用
set1 & set2
- 使用
set1.intersection(set2)
3. 关于GBDT的问题
3.1 GBDT中有哪些参数
- 弱学习器的个数
- 学习率
- 子采样(注:这里是不放回抽样),一般使用训练集的0.5-0.8的样本,防止过拟合。
- 损失函数。对于分类问题,可以选择对数似然损失函数、指数损失函数;对于回归问题,可以选择均方误差损失函数、绝对损失函数、Huber损失函数、分位数损失函数
注:这里解释一下Huber损失函数,这是均方误差损失函数与绝对损失函数的折中方法。对于远离中心的异常点采用绝对损失函数,对于在中心附近的点采用均方误差。
3.2 GBDT如何调参
网格搜索
3.3 GBDT如何对特征进行排序?
通过计算每个特征在所有树中的平均重要度进行排序
计算公式:
J
j
2
^
=
1
M
∑
m
=
1
M
J
j
2
^
(
T
m
)
,
J
j
2
^
(
T
m
)
=
∑
t
=
1
L
−
1
i
t
2
^
1
(
v
t
=
j
)
.
\begin{aligned} \hat{J_j^2} &= \frac{1}{M}\sum_{m=1}^M\hat{J_j^2}(T_m), \\ \hat{J_j^2}(T_m) &= \sum_{t=1}^{L-1}\hat{i_t^2}1(v_t=j). \end{aligned}
Jj2^Jj2^(Tm)=M1m=1∑MJj2^(Tm),=t=1∑L−1it2^1(vt=j).
4. SQL中的count(列名)
、count(1)
、count(*)
有什么区别?
一般来说,count(1)与count(*)区别不大,在统计的时候都是统计表中所有的记录数,而count(列名)则是统计该字段在记录中出现的次数,忽略字段为null的情况。
5. 什么是RFM模型?
R表示最近一次消费时间间隔(recency)、F表示消费频率(frequency)、M表示消费金额(money)。我们可以把这三个指标当成三维空间上的三个维度,将用户分成8类,分别为重要|一般 价值|发展|保持|挽留 用户。可以对不同的客户实施不同的营销策略。
6. 短视频质量评价规则
- 分为账号(认证,完整率,未认证)和互动(完播率,点赞,关注,评论,分享)
- 分为封面图质量模型(人工特征,迁移学习,wide&deep,特征融合),视频内容质量模型(NetVlad,TSN,Multimodal 多路内容质量模型),文本质量模型
7. bilibili的优缺点
优点:
- 技术优势,b站在视频播放上面有较强的技术。
- 用户优势:b站的用户大多是非常年轻活跃的用户,在这个流量时代这是非常宝贵的资源。虽然b站的月活用户不是很高,但是b站的用户粘性非常高。
- 内容优势:b站上有非常多的优秀的有才华的视频制作者,能够创作出很多质量非常高的UGC(用户原创)视频。而且b站的视频没有广告,所以还是非常迎合年轻人的品味的。
缺点:
- 商业变现能力低下,目前b站最大的应收来自于手游行业收入,占到月70%。而手游中FGO与碧蓝航线又占据了半壁江山。其他的应收就基本来自于一些大会员和周边商品服务。所以实际上,b站的总体营收模式并不健康,结构有些单一。
- 用户社群的维护和管理,当前的b站也逐渐形成了一些粉丝基数非常大的头部UP主,然而这种粉丝文化比较容易闹出负面新闻,粉丝之间的相互攻讦也会恶化社区的氛围。
- 随着用户数的不断增长,视频制作的门槛日益下降,不可避免地出现了视频质量下滑的原因。一些优秀的、质量很高的视频点击率很少,这个也是b站上市之后难以避免的结果吧。
注:如何提高b站的商业变现能力,或者如何优化b站的盈利模式?
内容变现,通过一些视频(电影,番剧等)付费或VIP优先制度提高用户的大会员购买率。
8. 在圆上随机地区三个点,这三个点构成锐角三角形的概率?
概率为 1 4 \frac{1}{4} 41
通过画图,固定一个点后,只要让另外两个点处于第一个点的两侧且他们之间的距离小于直径即可。或者也可以通过积分进行计算。
9. 处理不平衡数据的方法
原文章链接:https://zhuanlan.zhihu.com/p/139570091
- 数据预处理层面:数据重采样
- 特征层面:特征选择
- 分类算法层面:代价敏感,单类学习,集成学习
10. 窗口函数有哪些?
分为专用窗口函数rank(), dense_rank(), row_number()
和聚合函数sum(), avg(), count(), min(), max()
两个部分
11. A/B test样本量如何确定?
(1)对于一般的检验目标都是点击率,购买率等比例指标,所以我们在做A/B test时大多利用的两样本比例的假设检验。
(2)假设A组中
x
1
,
…
,
x
n
∼
B
(
1
,
π
1
)
x_1, \dots , x_n \sim B(1, \pi_1)
x1,…,xn∼B(1,π1),B组中
y
1
,
…
,
y
n
∼
B
(
1
,
π
2
)
y_1, \dots , y_n \sim B(1, \pi_2)
y1,…,yn∼B(1,π2)。我们提出假设,
H
0
:
π
1
=
π
2
v
s
H
2
:
π
1
≠
π
2
H_0: \pi_1 = \pi_2 \quad vs \quad H_2: \pi_1 \neq \pi_2
H0:π1=π2vsH2:π1=π2
(3)为了做检验,我们构造检验统计量。
第一步:令
p
1
=
1
n
∑
i
=
1
n
x
i
,
p
2
=
1
n
∑
i
=
1
n
y
i
p_1 = \frac{1}{n}\sum_{i=1}^nx_i, \quad p_2 = \frac{1}{n}\sum_{i=1}^ny_i
p1=n1i=1∑nxi,p2=n1i=1∑nyi
第二步:在大样本下我们知道
n
(
p
1
−
π
1
)
π
1
(
1
−
π
1
)
∼
N
(
0
,
1
)
,
n
(
p
2
−
π
2
)
π
2
(
1
−
π
2
)
∼
N
(
0
,
1
)
\frac{\sqrt{n}(p_1-\pi_1)}{\sqrt{\pi_1(1-\pi_1)}} \sim N(0, 1), \quad \frac{\sqrt{n}(p_2-\pi_2)}{\sqrt{\pi_2(1-\pi_2)}} \sim N(0, 1)
π1(1−π1)n(p1−π1)∼N(0,1),π2(1−π2)n(p2−π2)∼N(0,1)
第三步:由于A组与B组样本独立,所以
n
(
p
1
−
p
2
−
(
π
1
−
π
2
)
)
∼
N
(
0
,
π
1
(
1
−
π
1
)
+
π
2
(
1
−
π
2
)
)
n
(
p
1
−
p
2
−
(
π
1
−
π
2
)
)
π
1
(
1
−
π
1
)
+
π
2
(
1
−
π
2
)
∼
N
(
0
,
1
)
\sqrt{n}(p_1-p_2-(\pi_1-\pi_2)) \sim N(0, \pi_1(1-\pi_1)+\pi_2(1-\pi_2)) \\ \frac{\sqrt{n}(p_1-p_2-(\pi_1-\pi_2))}{\sqrt{\pi_1(1-\pi_1)+\pi_2(1-\pi_2)}} \sim N(0, 1)
n(p1−p2−(π1−π2))∼N(0,π1(1−π1)+π2(1−π2))π1(1−π1)+π2(1−π2)n(p1−p2−(π1−π2))∼N(0,1)
第四步:这里我们的统计量实际上已经出来了,
T
=
n
(
p
1
−
p
2
)
T = \sqrt{n}(p_1-p_2)
T=n(p1−p2),但是由于
π
1
,
π
2
\pi_1, \pi_2
π1,π2均未知,所以在给定两组样本时我们利用这个式子算出具体的统计量
T
T
T的观测值,但是我们却并不知道
T
T
T服从的分布的方差。所以我们需要求得
π
1
,
π
2
\pi_1, \pi_2
π1,π2的估计值。这里有两种求估计值的方法。第一种,当原假设成立,即
π
1
=
π
2
\pi_1 = \pi_2
π1=π2时,我们可以利用两个样本总体的比例去估计
π
1
,
π
2
\pi_1, \pi_2
π1,π2,即利用
p
=
n
1
p
1
+
n
2
p
2
n
1
+
n
2
=
p
1
+
p
2
2
p = \frac{n_1p_1+n_2p_2}{n_1+n_2}=\frac{p_1+p_2}{2}
p=n1+n2n1p1+n2p2=2p1+p2作为
π
1
,
π
2
\pi_1, \pi_2
π1,π2的估计值。第二种,当备择假设成立,即
π
1
≠
π
2
\pi_1 \neq \pi_2
π1=π2时,我们必须分别用
p
1
p_1
p1去估计
π
1
\pi_1
π1,
p
2
p_2
p2去估计
π
2
\pi_2
π2。
(4)我们先求拒绝域,由于我们需要利用第一类错误去计算拒绝域,所以我们利用上面的第一种估计方法来计算统计量
T
T
T的方差,
σ
1
=
π
1
(
1
−
π
1
)
+
π
2
(
1
−
π
2
)
=
2
⋅
p
1
+
p
2
2
⋅
(
1
−
p
1
+
p
2
2
)
\sigma_1 = \sqrt{\pi_1(1-\pi_1)+\pi_2(1-\pi_2)} = \sqrt{2 \cdot \frac{p_1+p_2}{2} \cdot (1-\frac{p_1+p_2}{2})}
σ1=π1(1−π1)+π2(1−π2)=2⋅2p1+p2⋅(1−2p1+p2)
所以
P
{
T
∈
C
α
∣
H
0
}
=
α
⟹
C
α
=
{
T
≥
z
α
2
σ
1
o
r
T
≤
−
z
α
2
σ
1
}
P\{T \in \mathscr{C}_\alpha|H_0\} = \alpha \\ \Longrightarrow \mathscr{C}_\alpha = \{T \geq z_{\frac{\alpha}{2}}\sigma_1 \ or \ T \leq -z_{\frac{\alpha}{2}}\sigma_1 \}
P{T∈Cα∣H0}=α⟹Cα={T≥z2ασ1 or T≤−z2ασ1}
(5)接下来我们要利用第二类错误计算所需的最小样本量,
P
{
T
∉
C
α
∣
H
1
}
=
β
P\{T \notin \mathscr{C}_\alpha|H_1\} = \beta \\
P{T∈/Cα∣H1}=β
注意,这个时候备择假设成立,即即
π
1
≠
π
2
\pi_1 \neq \pi_2
π1=π2,所以我们此时必须用上面提到的第二种方法去估计
π
1
,
π
2
\pi_1, \pi_2
π1,π2,即用
p
1
p_1
p1去估计
π
1
\pi_1
π1,
p
2
p_2
p2去估计
π
2
\pi_2
π2,所以我们有
T
∼
N
(
n
(
π
1
−
π
2
)
,
σ
2
2
)
,
σ
2
=
p
1
(
1
−
p
1
)
+
p
2
(
1
−
p
2
)
T \sim N(\sqrt{n}(\pi_1-\pi_2), \sigma_2^2), \\ \sigma_2 = \sqrt{p_1(1-p_1)+p_2(1-p_2)}
T∼N(n(π1−π2),σ22),σ2=p1(1−p1)+p2(1−p2)
所以
P
{
−
z
α
2
σ
1
≤
T
≤
z
α
2
σ
1
}
=
β
P
{
−
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
≤
T
−
n
(
π
1
−
π
2
)
≤
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
}
=
β
P
{
−
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
σ
2
≤
T
−
n
(
π
1
−
π
2
)
σ
2
≤
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
σ
2
}
=
β
ϕ
(
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
σ
2
)
−
ϕ
(
−
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
σ
2
)
=
β
P\{-z_{\frac{\alpha}{2}}\sigma_1 \leq T \leq z_{\frac{\alpha}{2}}\sigma_1\} = \beta \\ P\{-z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2) \leq T-\sqrt{n}(\pi_1-\pi_2) \leq z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)\} = \beta \\ P\{\frac{-z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)}{\sigma_2} \leq \frac{T-\sqrt{n}(\pi_1-\pi_2)}{\sigma_2} \leq \frac{z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)}{\sigma_2} \} = \beta \\ \phi(\frac{z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)}{\sigma_2}) - \phi(\frac{-z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)}{\sigma_2}) = \beta
P{−z2ασ1≤T≤z2ασ1}=βP{−z2ασ1−n(π1−π2)≤T−n(π1−π2)≤z2ασ1−n(π1−π2)}=βP{σ2−z2ασ1−n(π1−π2)≤σ2T−n(π1−π2)≤σ2z2ασ1−n(π1−π2)}=βϕ(σ2z2ασ1−n(π1−π2))−ϕ(σ2−z2ασ1−n(π1−π2))=β
这里我们可以做一个近似,由于A组是实验组,B组是对照组,所以当
π
1
≠
π
2
\pi_1 \neq \pi_2
π1=π2时,我们可以认为
π
1
≥
π
2
\pi_1 \geq \pi_2
π1≥π2,即这个策略起到了效果并且是正面的效果。这样的话
−
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
σ
2
\frac{-z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)}{\sigma_2}
σ2−z2ασ1−n(π1−π2)就会是一个非常小的负数,我们可以近似认为
ϕ
(
−
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
σ
2
)
=
0
\phi(\frac{-z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)}{\sigma_2}) = 0
ϕ(σ2−z2ασ1−n(π1−π2))=0(实际上这里我们假设
π
1
≤
π
2
\pi_1 \leq \pi_2
π1≤π2也可以,这样舍弃的就是右边的值)。于是我们得到(注意,本文用的全是上分位数),
ϕ
(
z
α
2
σ
1
−
n
(
π
1
−
π
2
)
σ
2
)
=
β
P
{
X
≥
n
(
π
1
−
π
2
)
−
z
α
2
σ
1
σ
2
}
=
β
n
(
π
1
−
π
2
)
−
z
α
2
σ
1
σ
2
=
z
β
n
=
(
z
α
2
σ
1
+
z
β
σ
2
)
2
(
π
1
−
π
2
)
2
\phi(\frac{z_{\frac{\alpha}{2}}\sigma_1 - \sqrt{n}(\pi_1-\pi_2)}{\sigma_2}) = \beta \\ P\{X \geq \frac{\sqrt{n}(\pi_1-\pi_2)-z_{\frac{\alpha}{2}}\sigma_1}{\sigma_2}\} = \beta \\ \frac{\sqrt{n}(\pi_1-\pi_2)-z_{\frac{\alpha}{2}}\sigma_1}{\sigma_2} = z_{\beta} \\ n = \frac{(z_{\frac{\alpha}{2}}\sigma_1 + z_{\beta}\sigma_2)^2}{(\pi_1-\pi_2)^2}
ϕ(σ2z2ασ1−n(π1−π2))=βP{X≥σ2n(π1−π2)−z2ασ1}=βσ2n(π1−π2)−z2ασ1=zβn=(π1−π2)2(z2ασ1+zβσ2)2
其中
π
1
−
π
2
\pi_1 - \pi_2
π1−π2可以用
p
1
−
p
2
p_1-p_2
p1−p2代替,于是最终我们得到最小样本量n的计算公式,
n
=
(
z
α
2
σ
1
+
z
β
σ
2
)
2
(
p
1
−
p
2
)
2
=
(
z
α
2
2
⋅
p
1
+
p
2
2
⋅
(
1
−
p
1
+
p
2
2
)
+
z
β
p
1
(
1
−
p
1
)
+
p
2
(
1
−
p
2
)
)
2
(
p
1
−
p
2
)
2
.
n = \frac{(z_{\frac{\alpha}{2}}\sigma_1 + z_{\beta}\sigma_2)^2}{(p_1-p_2)^2} = \frac{(z_{\frac{\alpha}{2}}\sqrt{2 \cdot \frac{p_1+p_2}{2} \cdot (1-\frac{p_1+p_2}{2})} + z_{\beta}\sqrt{p_1(1-p_1)+p_2(1-p_2)})^2}{(p_1-p_2)^2}.
n=(p1−p2)2(z2ασ1+zβσ2)2=(p1−p2)2(z2α2⋅2p1+p2⋅(1−2p1+p2)+zβp1(1−p1)+p2(1−p2))2.
12. 常用的激活函数有哪些以及区别?
-
sigmoid函数
优点:sigmoid函数可以将实数映射到 ( 0 , 1 ) (0, 1) (0,1)区间内。平滑、易于求导
缺点:- 激活函数含有幂运算和除法,计算量大;
- 反向传播时,很容易就会出现梯度消失的情 况,从而无法完成深层网络的训练;
- sigmoid的输出不是0均值的,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
-
hard-sigmoid函数
特点:计算量小,非平滑 -
tanh双曲正切函数
tanh函数相比于sigmoid函数更加得陡峭,并且输入值的均值为0。可以使得有差异的特征区分得更开,也不能避免梯度消失的情况。 -
ReLU函数
优点:- 计算量小;
- 激活函数导数维持在1,可以有效缓解梯度消失和梯度爆炸问题;
- 使用Relu会使部分神经元为0,这样就造成了网络的稀疏性,并且减少了参数之间的相互依赖关系,缓解了过拟合问题的发生。
缺点:在学习率较大时,可能导致较多的神经元的输出为0,在反向传播时也会是0,使得这些神经元失去作用。
-
Leaky ReLU函数,PReLU函数,elu函数
特点:基本都可以算作ReLU的改进,主要就是为了防止当学习率设置得较大时,ReLU在开始就可能杀死很多神经元。而这些改进的函数的作用基本就是在x<0的时候,输出依然不为0,梯度依然不为0,可以使得神经元继续发挥作用。 -
softmax函数
主要用在分类网络的最后一层,把网络输出转化为各个类别的概率。
13. 常用的损失函数有哪些以及区别?
- 0-1损失函数
- 绝对值损失函数
- 对数损失函数
- Logistic回归时使用的就是对数损失函数
- 平方损失函数
- 普通最小二乘法就是平方损失函数;
- Lasso回归是在平方损失函数的基础加上参数的L1正则项;
- 岭回归就是在平方损失函数的基础上加上参数的L2正则项。
- 指数损失函数
- AdaBoost算法使用的就是指数损失函数
- Hinge损失函数
- 损失函数形式: L ( y , f ( x ) ) = m a x ( 0 , 1 − y f ( x ) ) L(y, f(x)) = max(0, 1-yf(x)) L(y,f(x))=max(0,1−yf(x));
- SVM使用的就是这种损失函数。分类正确损失为0,否则损失为 1 − y f ( x ) 1-yf(x) 1−yf(x);
- y y y取值为-1或1; f ( x ) f(x) f(x)取值为 ( − 1 , 1 ) (-1, 1) (−1,1);
- 稳定性比较高,对异常值/噪声不敏感。
- 交叉熵损失函数
- 损失函数形式: L ( y , f ( x ) ) = − 1 n ∑ i = 1 n [ y l n f ( x ) + ( 1 − y ) l n ( 1 − f ( x ) ) ] L(y, f(x)) = -\frac{1}{n}\sum_{i=1}^n[ylnf(x) + (1-y)ln(1-f(x))] L(y,f(x))=−n1∑i=1n[ylnf(x)+(1−y)ln(1−f(x))];
- 其中 y y y为实际值, f ( x ) f(x) f(x)为模型的预测值,也就是最后一步激活函数(sigmoid或softmax函数)的输出值;
- 与对数损失函数是等价的;
- 利用交叉熵损失函数时,误差大,权重更新快,误差小,权重更新慢,性质较好。
14. 什么时梯度消失/梯度爆炸现象以及解决方法?
原因:
- 梯度消失:1. 网络层数较深,根据链式法则,很容易导致靠近输入层的隐藏层权重更新较慢;2. 激活函数选用不合理,如sigmoid函数,其导数取值在0-0.25之间,在链式法则传播时,很容易发生梯度消失现象。
- 梯度爆炸:1. 同样可能是因为网络层数较深;2. 权重的初始值设置太大,同样在利用梯度更新权重的时候,可能会导致梯度爆炸。
解决方法:
- 预训练 + 微调(目前使用不多);
- 梯度剪切:对梯度设定一个阈值,防止梯度爆炸;
- 权重正则化:L1正则,L2正则
- 选用ReLU激活函数
- 批量归一化
15. 最近有了解什么新的机器学习或深度学习算法吗?
16. 最近有看过什么技术相关的书吗?
17. 介绍一下t-SNE降维
18. k-means聚类有什么问题以及改进方法?
19. 连续特征离散化的好处及方法?
20. 如何建立一个用户转化率预估模型?
21. AUC计算公式
A
U
C
=
P
(
P
正
样
本
>
P
负
样
本
)
AUC = P(P_{正样本} > P_{负样本})
AUC=P(P正样本>P负样本)
具体的计算公式:
A
U
C
=
∑
I
(
P
正
样
本
,
P
负
样
本
)
N
AUC = \frac{\sum I(P_{正样本}, P_{负样本})}{N}
AUC=N∑I(P正样本,P负样本)
I
(
P
正
样
本
,
P
负
样
本
)
=
{
1
,
P
正
样
本
>
P
负
样
本
0.5
,
P
正
样
本
=
P
负
样
本
0
,
P
正
样
本
<
P
负
样
本
I(P_{正样本}, P_{负样本}) = \left\{\begin{matrix} 1, P_{正样本} > P_{负样本}\\ 0.5, P_{正样本} = P_{负样本} \\ 0, P_{正样本} < P_{负样本} \end{matrix} \right.
I(P正样本,P负样本)=⎩⎨⎧1,P正样本>P负样本0.5,P正样本=P负样本0,P正样本<P负样本
22. 什么是注意力(Attention)机制?
23. 什么是变换器(Transformer)?