LogM

LogM 查看完整档案

杭州编辑  |  填写毕业院校  |  填写所在公司/组织 imLogM.github.io 编辑
编辑

同步博客地址:https://me.csdn.net/qq_28739605
旧博客地址:https://imlogm.github.io/

个人动态

LogM 发布了文章 · 2020-06-05

【Linux】screen 常用命令

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~

1、常用命令

screen -ls              # 查看所有screen
screen -S <screen-name> # 创建screen,并命名
ctr + A, D              # 快捷键,退出当前screen
screen -r <screen-name> # 进入screen
screen -X quit          # 删除screen,但没有指定会话
screen -X -S [session you want to kill] quit #删除screen,指定会话
screen -wipe            # 清除dead screens

2、快捷键

# 默认的 command key 是 ctrl+a
escape ``    #指定command key 为 `,并指定在按下 ` 后再按 `,相当于之前 C-a a 的效果
C-a ?        #列出当前可用快捷键及其对应的命令
C-a :        #进入命令输入模式,之后可输入并执行screen中的命令,比如quit强制关闭当前screen,比如split分屏
C-a d        #使当前session处于Detached状态
C-a :quit    #关闭当前会话
C-a c        #新建窗口
C-a K        #强制关闭当前窗口
C-a \"       #显示当前会话的窗口列表,用j、k上下移动光标选择窗口,或直接用0-9选择窗口
C-a \'       #输入窗口序号或title,选择指定窗口
C-a 0-9      #选择指定窗口
C-a n        #选择下一个窗口
C-a [space]  #选择下一个窗口
C-a p        #选择上一个窗口
C-a C-a      #移动到上一次选择的窗口
C-a A        #修改当前窗口的title
C-a [        #进入复制模式。
C-a ]        #将buffer中的内容粘贴出来,退出复制模式。vim 中最好是在insert模式下。

3、配置

# screen的配置:
cp /etc/screenrc ~/.screenrc
# 再在 ~/.screenrc 中追加配置:
caption always "%3n %t%? @%u%?%? [%h]%?%=%c"    # 底部倒数第二行信息条,显示当前窗口信息
hardstatus alwaysignore
hardstatus alwayslastline '%{bW}%-w%{.wB}%n %t%{-}%+w %=%{.w}'  # # 底部倒数第一行信息条,显示当前会话的所有窗口

4、其它

# 有些服务器上会遇到如下报错 screen Cannot open your terminal '/dev/xxx/x'
# 解决方案,命令行运行:
script /dev/null

示例配置:

#
# This is an example for the global screenrc file.
# You may want to install this file as /usr/local/etc/screenrc.
# Check config.h for the exact location.
#
# Flaws of termcap and standard settings are done here.
#

#startup_message off

#defflow on # will force screen to process ^S/^Q

deflogin on
#autodetach off

vbell on
vbell_msg "   Wuff  ----  Wuff!!  "

# all termcap entries are now duplicated as terminfo entries.
# only difference should be the slightly modified syntax, and check for
# terminfo entries, that are already corected in the database.
#
# G0    we have a SEMI-GRAPHICS-CHARACTER-MODE
# WS    this sequence resizes our window.
# cs    this sequence changes the scrollregion
# hs@   we have no hardware statusline. screen will only believe that
#       there is a hardware status line if hs,ts,fs,ds are all set.
# ts    to statusline
# fs    from statusline
# ds    delete statusline
# al    add one line
# AL    add multiple lines
# dl    delete one line
# DL    delete multiple lines
# ic    insert one char (space)
# IC    insert multiple chars
# nx    terminal uses xon/xoff

termcap  facit|vt100|xterm LP:G0
terminfo facit|vt100|xterm LP:G0

#the vt100 description does not mention "dl". *sigh*
termcap  vt100 dl=5\E[M
terminfo vt100 dl=5\E[M

#facit's "al" / "dl"  are buggy if the current / last line
#contain attributes...
termcap  facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%d;%dr:ic@
terminfo facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%p1%d;%p2%dr:ic@

#make sun termcap/info better
termcap  sun 'up=^K:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:IC=\E[%d@:WS=1000\E[8;%d;%dt'
terminfo sun 'up=^K:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC:IC=\E[%p1%d@:WS=\E[8;%p1%d;%p2%dt$<1000>'

#xterm understands both im/ic and doesn't have a status line.
#Note: Do not specify im and ic in the real termcap/info file as
#some programs (e.g. vi) will (no,no, may (jw)) not work anymore.
#termcap  xterm|fptwist hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
#terminfo xterm|fptwist hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l

# Long time I had this in my private screenrc file. But many people
# seem to want it (jw):
# we do not want the width to change to 80 characters on startup:
# on suns, /etc/termcap has :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l:
#termcap xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
#terminfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

#
# Do not use xterms alternate window buffer.
# This one would not add lines to the scrollback buffer.
#termcap xterm|xterms|xs ti=\E7\E[?47l
#terminfo xterm|xterms|xs ti=\E7\E[?47l

#make hp700 termcap/info better
termcap  hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'
terminfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'

#wyse-75-42 must have defflow control (xo = "terminal uses xon/xoff")
#(nowadays: nx = padding doesn't work, have to use xon/off)
#essential to have it here, as this is a slow terminal.
termcap wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h
terminfo wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h

#remove some stupid / dangerous key bindings
bind ^k
#bind L
bind ^\
#make them better
bind \\ quit
bind K kill
bind I login on
bind O login off
bind } history

# This is how one can set a reattach password:
# password ODSJQf.4IJN7E    # "1234"

# don't display the copyright page
startup_message off

# emulate .logout message
pow_detach_msg "Screen session of $LOGNAME $:cr:$:nl:ended."

# advertise hardstatus support to $TERMCAP
# termcapinfo  * '' 'hs:ts=\E_:fs=\E\\:ds=\E_\E\\'

# make the shell in every window a login shell
#shell -$SHELL

# autoaka testing
# shellaka '> |tcsh'
# shellaka '$ |sh'

# set every new windows hardstatus line to somenthing descriptive
# defhstatus "screen: ^En (^Et)"

defscrollback 1000

# don't kill window after the process died
# zombie "^["

# enable support for the "alternate screen" capability in all windows
# altscreen on

################
#
# more xterm tweaks
#

#80/132 column switching must be enabled for ^AW to work
#change init sequence to not switch width
#termcapinfo  xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l

# Make the output buffer large for (fast) xterms.
#termcapinfo xterm* OL=10000
termcapinfo xterm* OL=100

# tell screen that xterm can switch to dark background and has function
# keys.
termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l'
#termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~'
#termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~'

# special xterm hardstatus: use the window title.
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

#terminfo xterm 'vb=\E[?5h$<200/>\E[?5l'
#termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l'

# emulate part of the 'K' charset
termcapinfo   xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334,{\344,|\366,}\374,~\337'

# xterm-52 tweaks:
# - uses background color for delete operations
termcapinfo xterm* be

################
#
# wyse terminals
#

#wyse-75-42 must have flow control (xo = "terminal uses xon/xoff")
#essential to have it here, as this is a slow terminal.
termcapinfo wy75-42 xo:hs@

# New termcap sequences for cursor application mode.
termcapinfo wy* CS=\E[?1h:CE=\E[?1l:vi=\E[?25l:ve=\E[?25h:VR=\E[?5h:VN=\E[?5l:cb=\E[1K:CD=\E[1J

################
#
# other terminals
#

# make hp700 termcap/info better
termcapinfo  hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'

# Extend the vt100 desciption by some sequences.
termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC
termcapinfo linux C8
# old rxvt versions also need this
# termcapinfo rxvt C8

# Yet another hack:
# Prepend/append register [/] to the paste if ^a^] is pressed.
# This lets me have autoindent mode in vi.
#register [ "\033:se noai\015a"
#register ] "\033:se ai\015a"
#bind ^] paste [.]

################
#
# default windows
#

# screen -t local 0
# screen -t mail 1 mutt
# screen -t 40 2 rlogin server

# caption always "%3n %t%? @%u%?%? [%h]%?%=%c"
## alternative caption, gives window list, LOGNAME and current date:
# caption always "%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw %=%{mk}@%H %{yk}%D %{ck}%M%{wk} %{ck}%d %{gk}%c"
# hardstatus alwaysignore
# hardstatus alwayslastline "%Lw"

# Red Hat's normal status line
hardstatus string "[screen %n%?: %t%?] %h"

# bind = resize =
# bind + resize +1
# bind - resize -1
# bind _ resize max
#
# defnonblock 1
# blankerprg rain -d 100
# idle 30 blanker

caption always "%3n %t%? @%u%?%? [%h]%?%=%c"
hardstatus alwaysignore
hardstatus alwayslastline '%{bW}%-w%{.wB}%n %t%{-}%+w %=%{.w}'
查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2020-04-06

【推荐系统】推荐系统实践

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~

本文是 推荐系统实践 的读书笔记。

1. 概述

1_概述.png

2. 利用用户行为数据

2_利用用户行为数据.png

3. 冷启动

3_冷启动.png

4. 利用用户标签

4_利用用户标签.png

5. 利用上下文信息

5_利用上下文信息.png

6. 利用社交网络数据

6_利用社交网络数据.png

查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2020-03-31

【计算机基础】数据库系统(3)底层实现

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~

本文是 Mooc 课程 数据库系统 的笔记。

1. 存储

7_存储.png

2. 索引

8_索引.png

3. 底层实现

9_底层实现.png

查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2020-03-28

【计算机基础】数据库系统(2)建模与设计

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~

本文是 Mooc 课程 数据库系统 的笔记。

1. 概述

4_建模与设计.png

2. 数据建模

5_数据建模.png

3. 数据库设计

6_数据库设计.png

查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2020-03-27

【计算机基础】数据库系统(1)编程语言

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~

本文是 Mooc 课程 数据库系统 的笔记。

1. 数据库系统概述

1_数据库系统.png

2. 关系模型

2_关系模型.png

3. SQL语言

3_SQL语言.png

3.1 基础语法

--创建数据库
Create Database SCT;

--创建表
Create Table Student(S# char(8) not null, Sname char(10),
                     Ssex char(2), Sage integer,
                     D# char(2), Sclass char(6));
Create Table Course(C# char(3), Cname char(12), Chours integer,
                    Credit float(1), T# char(3));

--插入
Insert Into Student
Values('98030101', '张三', '男', 20, '03', '980301');
Insert Into Student(S#, Sname, Ssex, Sage, D#, Sclass)
Values('98030102', '李四', '女', 20, '03', '980301');

--查询
Select * From Sudent;
Select DISTINCT Sname, Sage
From Student Where Sage<=19 and D#='03';  --使用关键字DISTINCT去重

--排序
Select S#, Sname From Student
Order By S# ASC;  --ASC升序,DESC降序,默认升序

--模糊查询
--'%'匹配零个或多个字符,'-'匹配任意单个字符,'\'转移字符
Select S#, Sname From Student
Where Sname Like '张%';  --Like 或 Not Like

--多表联合查询
Select * From Student, SC, Course
Where Student.S#=SC.S# and SC.C#=Course.C# and Cname='数据库'
Order By Score DESC;
Select S1.Sname as Stud1, S2.Sname as Stud2
From Student S1, Student S2
Where S1.Sage>S2.Sage  --表的重命名
Select S1.S# From SC S1, SC S2
Where S1.S#=S2.S# and S1.C#='001' and S2.C#='002'  --查询同时学过两门课程的同学学号

--新增
--将符合条件的内容插入新表ST中
Insert Into St(S#, Sname)
Select ... From ... Where ... Order By ...;

--删除
Delet From SC;
Delet From SC Where S#='98030101';

--修改
Update Teacher Set Salary=Salary*1.05;  --所有教师的工资涨5%

--表修正
Alter Table Student Add Saddr char[40], PID char[18]; --表新增2列
Alter Table Student Modify Sname char(10);  --修改列的数据类型
Alter Table Student Drop Unique(Sname);  --Sname不再作为候选码
Alter Table Student Drop Sname;  --删除一列

--删除表/数据库
Drop Table Student;  --删除表
Drop Database SCT;  --删除数据库

--切换数据库
use SCT;  --切换到SCT数据库
close SCT;  --关闭SCT数据库

3.2 子查询

--(Not) In 子查询
Select * From Student Where Sname in ('张三', '李四');
Select S#, Sname From Student
Where S# not in (Select S# From SC Where C#='001');  --没学过课程001的同学

--Some/All 子查询
Select Tname From Teacher
Where Salary<=all (Select Salary From Teacher);  --工资最低的老师
Select Tname From Teacher
Where Salary<some (Select Salary From Teacher);  --工资不是最高的老师

--(Not) Exists 子查询
--判断元组是否存在
Select Sname From Student
Where not exists
      (Select * From Course, SC, Teacher
       Where Tname='李明', and Course.T#=Teacher.T#
       and Course.C#=SC.C# and S#=Student.S#);  --没有学过李明老师任何一门课的学生姓名

--结果计算
Select T1.Tname as Tr1, T2.Tname as Tr2, T1.Salary-T2.Salary as diff
From Teacher T1, Teacher T2
Where T1.Salary>T2.Salary;

--聚集函数
--Count, Sum, Avg, Max, Min
Select Sum(Salary) From Teacher;  --求教师工资总和

--聚集
Select S#, Avg(Score) From SC Group By S#;  --求每个学生的平均成绩

--分组过滤
Select S# From SC
Where Score<60
Group By S# Having Count(*)>2;  --不及格课程超过2门的学生学号

--并交差
--Union并、Intersect交、Except差
--带All则保留重复
Select S# From SC Where C#='002'
UNION
Select S# From SC Where C#='003';   --学过课程002或课程003的同学

--空值处理
Select Sname From Student
Where Sage is null;  --找出年龄为空的学生姓名

--连接
--[inner | {left|right|full} outer] join
--on ... 条件连接;natural 自然连接
Select Teacher.T#, Tname, Cname
From Teacher Inner Join Course
     ON Teacher.T#=Course.T#
Order By Teacher.T# ASC;  --求所有教师的任课情况

--视图 View
Create View CompStud AS
       (Select * From Student
        Where D# in (Select D# From Dept Where Dname='计算机'))  --计算机系的学生定义为一个视图
Create View StudStat(S#, Sname, AvgS, CNT)
AS (Select S#, Sname, Avg(Score), Count(*))
    From Student S, SC
    Where S.S#=SC.S#
    Group By S.S#);  --将学生的平均成绩定义为视图
--定义好的视图可以像Table一样操作
Drop View CompStud;  --删除视图

3.3 约束

--约束
--列约束
Create Table Student(S# char(8) not null unique,  --不能为空,且是候选码
                     Sname char(10),
                     Ssex char(2) constraint ctssex check (Ssex='男' or Ssex='女'),  --定义性别约束,并取名ctssex
                     Sage integer check(Sage>=1 and Sage<150)  --定义年龄约束
                     D# char(2) references Dept(D#) on delete cascade,
                     --定义外码,并设置删除时其它表对应行也删除(cascade),也可以设为置空(set null)
                     Sclass char(6));

--表约束
Create Table Student(S# char(8), ...,
                     primary key(S#),   --定义主码
                     constraint xxx check(xxxx)  --定义表约束,可涉及多列,并命名为xxx
                     foreign key(S#) references Course(S#) on delete cascade,
                     foreign key(D#) references Dept(D#) on delete cascade
                     --定义外码,并设置删除时其它表对应行也删除(cascade),也可以设为置空(set null)
                     );

--断言:对任何更新都执行所有断言,慢
Create Assertion ctssex Check
(not exists(
            Select * From Student
            Where Ssex<>'男' and Ssex<>'女'
));

--触发器
Create Trigger teacher_chgsal
Before Update of Salary On Teacher
Referencing new x, old y
for each row when (x.Salary<y.Salary)
begin
    raise_application_error(-20003, 'invalid salary on update');
end;  --设定教师的工资只能涨不能降,并取名为teacher_chgsal

Create Trigger updS#
After Update of S# On Student
Referencing old oldi, new newi
for each row
begin
    update SC set S#=newi.S# where S#=oldi.S#;
end;  --当学生的学号更换时,SC表中的学号自动更换

3.4 授权

--授权
Grant All Priviledges On Employee To Emp2001;  --该员工拥有Employee表的所有权限
Grant SELECT On EmpV2 To Emp5001;  --该员工拥有EmpV2视图的读取权限
Grant SELECT On EmpV3 To public;  --所有员工拥有EmpV2视图的读取权限

--撤销授权
Revoke All Priviledges On Employee From Emp2001;

4. 嵌入式SQL

4.1 基础语法

--变量声明
exec sql begin declare section;
    char vSname[10], vSpecName[10]='张三';
    int vSage;
exec sql end declare section;

--数据库连接
exec sql connect to target-server as connect-name user user-name;  --标准写法
exec sql connect to default;  --或这样写

--数据库断开
exec sql disconnect connect-name;  --标准写法
exec sql disconnect current;  --或这样写

--单条记录处理:c语言中的使用
exec sql select Sname, Sage into :vSname, :vSage from Student
where Sname=:vSpecName;  --可以在最后加 for read only

--提交与撤销
--只有当执行到提交时sql才正式执行
--视为一次"事务"
exec sql commit work;  --提交
exec sql rollback work;  --撤销

--多条记录处理:游标
--定义游标
exec sql declare cur_student cursor for
select Sno, Sname, Sclass from Student
where Sclass='035101';   --可以在最后加 for read only
--打开游标
exec sql open cur_student;
--依次读入
while(1) {
    exec sql fetch cur_student into :vSno, :vSname, :vSclass;
}
--关闭游标
exec sql close cur_student;
--可滚动的游标(ODBC支持)
--不只限于从上到下读
exec sql declare cursor_name scroll for xxx;
exeec sql fetch [next|prior|first|last|absolut xx|relative xx] from cursor_name into xxx;

--删除
exec sql delete from Student S where S.Sname='张三';
while(1) {
    exec sql fetch cursor_name into xxx;
    exec sql delete from Student where current of cursor_name;
}

--异常捕获
--异常类型:sqlerror、not found、sqlwarning
--可选择的处理方式:continue、goto、stop、do/call
exec sql include sqlca;  --SQL communication area 头文件
exec sql whenever sqlerror goto report_error;
report_error:
    exec sql rollback;

4.2 动态SQL

--动态SQL
--构造SQL指令字符串,再执行
--1.立即执行:运行时编译并执行
exec sql begin declare section;
    char vSname[10];
    char sqltext[] = "delete from Student where Sname=\'";
exec sql end declare section;
strcat(sqltext, vSname);
strcat(sqltext, "\';");
exec sql execute immediate :sqltext;  --执行
exec sql commit work;

--2.预先编译
exec sql begin declare section;
    char vSname[10];
    char sqltext[] = "delete from Student where Sname=:variable";
exec sql end declare section;
exec sql prepare temp_name from :sqltext;
exec sql execute temp_name using :vSname;    --执行
exec sql commit work;

4.3 数据字典

数据字典:DBMS自带的存储索引、表结构、统计等信息的表和视图;
使用SQLDA(描述符区域,Descriptor Area)读取数据字典。

4.4 ODBC

ODBC:Open DataBase Connection,统一DBMS的API接口

查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2020-02-06

【Linux】vim 常用命令

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~

:set nu    " 显示行号(或:set number)
:set nonu  " 关闭行号(或:set nonumber)
:set ic    " 忽略大小写(:set ignorecase)
:set noic  " 大小写敏感(:set noignorecase)

:set list  " 显示不可见符号(换行符等)

:3,7s/a/b/g  " 将第3行到第7行的a替换为b
:3,+2s/a/b/g  " 将第3行和往下2行的a替换为b
/name\c    " 查找name且不区分大小写

下方图片为转载,原作者见水印,源出处未找到。

图片中橙色部分为原图的错误处,我做了修正。

vim命令大全.png

查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2020-01-17

【读书笔记】计算广告(第3部分)

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~

文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧

本文是 计算广告(第二版) 的读书笔记。

该部分介绍在线广告的关键技术,面向技术人员。

第9章 计算广告技术概览

9.1 个性化系统框架

  • 日志 -> 数据高速公路 -> 流计算 -> 在线特征 -> 投放引擎;
  • 日志 -> 数据高速公路 -> 分布式计算 -> 离线特征 -> 投放引擎。

9.2 各类广告系统优化目标

  • GD:满足合约要求;
  • ADN:CPC,预估点击率;
  • ADX:CPM;
  • DSP:预估点击率+点击价值。

9.3 计算广告系统架构

  • 广告投放引擎:

    • 广告投放机(ad server):召回+排序+收益管理,要求QPS和延迟;
    • 检索(ad retrieval):根据用户标签和页面标签,召回候选集;
    • 排序(ad ranking):计算eCPM,估计点击率+点击价值,排序;
    • 收益管理(yield management):目标全局收益最优;
    • 广告请求接口:web请求或者SDK;
    • 定制化用户划分:广告主对用户的划分数据。
  • 数据高速公路(data highway)
  • 离线数据处理:

    • 用户会话日志生成:以用户ID进行统一整理;
    • 行为定向:挖掘用户日志,打标签;
    • 上下文定向:给上下文页面打标签;
    • 点击率建模:为CTR模型加工特征;
    • 分配规划:以全局收益最优为目标,从日志中挖掘合适的分配方案;
    • 商业智能系统:为决策者提供数据(BI);
    • 广告管理系统:广告主工具(AE),管理投放方案。
  • 在线数据处理:

    • 在线反作弊:去除作弊流量;
    • 计费;
    • 在线行为反馈:实时受众定向、实时点击反馈;
    • 实时索引:实时接收广告数据,更新索引。

9.4 计算广告系统主要技术

  • 算法优化:

    • 受众定向;
    • eCPM预估,点击率预测;
    • 在线分配(合约中的流量要求);
    • 定价策略:博弈中收益最大化;
    • 探索与利用(Explore and Exploit,E&E):更全面地采样;
    • 个性化推荐。
  • 架构优化:

    • 实时索引;
    • NoSQL数据库;
    • 分布式计算+流计算;
    • 高并发、低延迟竞价接口。

9.5 开源工具

  • Nginx:web服务器;
  • ZooKeeper:分布式集群管理;
  • Lucene:索引+检索;
  • Thrift:跨语言通信,用于封装各模块的接口;
  • Flume:数据高速公路;
  • Hadoop:分布式数据处理;
  • Redis:特征在线缓存,属于NoSQL数据库;
  • Storm:流计算;
  • Spark:满足各种计算方式,包括迭代计算、批处理计算、流式计算、图计算、SQL关系查询等。

第10章 基础知识准备

10.1 信息检索

  • 倒排索引:

    • 基本操作:向索引添加文档;给定query,返回对应集合
  • 向量空间模型(vector space model,VSM):

    • TF-IDF构建向量,cos求距离

10.2 最优化方法

  • 拉格朗日法:带约束的优化

    • 当原问题是凸优化问题,则满足强对偶,即对偶问题的最优解是原问题最优解的下界;
    • 强对偶下,满足KKT条件的点,即为原问题解。
  • 下降单纯形法:

    • 不可求导情况下,函数如果是连续的,可用该方法;
    • 有点像高维空间的二分法;
    • 又称阿米巴变形虫法。
  • 梯度下降法;
  • 拟牛顿法。

10.3 统计机器学习

  • 最大熵与指数族分布:

    • 求最大熵的解等价于求对应指数分布的最大似然解;
    • 指数族分布是单模态的,不适合表达多因素并存的随机量。
  • 混合模型和EM算法:

    • 解决指数族分布单模态的问题;
    • 多个指数族分布叠加为混合模型。
  • 贝叶斯学习;
  • 深度学习:CNN、RNN、GAN。

第11章 合约广告核心技术

11.1 广告排期系统

  • CPT,非个性;
  • 防天窗广告:广告加载错误时的默认广告。

11.2 担保式投送系统

  • 流量预测:用历史数据拟合未来的流量;
  • 频次控制:一个用户看到同个广告次数越多,点击率越低;实现方式是把频次记录到数据库。

11.3 在线分配

  • 抽象为二部图匹配问题,引入广告流量在各个周期内近似一致的假设,求解该问题。

第12章 受众定向核心技术

12.1 受众定向技术分类

  • 用户标签t(u):人口属性定向、行为定向;
  • 上下文标签t(c):地域定向、频道定向、上下文定向;
  • 定制化标签t(a,u):特定广告主对特定用户的标签,重定向、新客推荐。

12.2 上下文定向

  • 半在线抓取系统:上下文定向需要抓取上下文内容,但实时抓取延迟太大,全网爬虫则成本太高;一般的解决方法是,当有某个页面上下文标签的请求时,进行抓取并放入缓存,该次广告展示来不及使用该标签就忽略,但以后相同页面的上下文请求就可以在缓存中获取。

12.3 文本主题挖掘

  • 主题模型(topic model)
  • LSA(latent semantic analysis,潜在语义分析),无监督方式,对 TF-IDF 矩阵做 SVD 分解,类似 PCA。
  • PLSI(probabilistic latent semantic indexing,概率潜在语义索引):假设有k个主题($z_1,z_2,..,z_k$),用k个多项式分布的混合模型进行建模 $p(w_n|z,\beta)$,$\beta$ 是参数,共有k组,$w_n$ 是文档中的每个词;使用EM求解该混合模型。
  • LDA(latent dirichlet allocation,潜在狄利克雷分配):在 PLSI 的基础上,引入贝叶斯,对数据不足时做平滑。
  • word2vec。

12.4 行为定向

  • 建模:使用泊松分布对某个用户在某类定向广告上的点击次数建模;用线性模型联系泊松分布的参数 $\lambda$ 和用户行为;整个模型相当于泊松分布的广义线性模型。
  • 特征:用户行为映射到事先确定的标签体系中,并用单位时间累积强度表示;使用滑动平均求时间窗口内的平均值;另外需要考虑:

    • 训练集长度:为了消除工作日带来的周期性,一般训练集天数选为7的倍数;
    • 时间窗口大小:希望系统反应更即时,则使用窄的时间窗口。
  • 决策:整个模型是线性的,今天的得分可以由前几天的得分滑动平均得到。
  • 评测:reach-ctr 曲线。

12.5 人口属性预测

  • 机器学习中的多分类问题:性别、年龄、教育程度、收入水平。

12.6 数据管理平台

第13章 竞价广告核心技术

13.1 竞价广告计价算法

  • GSP:广义第二高价;
  • MRP:市场保留价(最终价格不能低于此价格);
  • 价格挤压因子:控制最终的排序中点击率和出价哪个影响大。

13.2 搜索广告系统

  • 查询拓展:

    • 基于推荐的方法:协同过滤;
    • 基于主题模型的方法:主题模型;
    • 基于历史效果的方法:效果明显。
  • 广告放置:在一段时间内北区整体广告条数约束的前提下,提高广告的整体营收。

13.3 广告网络

  • 短时行为反馈与流计算:

    • 实时反作弊;
    • 实时计费:预算用完的广告及时下线;
    • 短时用户标签;
    • 短时动态特征:CTR预测中的动态特征。

13.4 广告检索

  • 布尔表达式的检索;
  • 相关性检索:WAND算法,TF-IDF算相关性+小顶堆快速检索;
  • 基于DNN的语义建模:DSSM、Youtube个性化推荐模型;
  • 近似最近邻语义检索(ANN):

    • 哈希算法:局部敏感哈希(LSH);
    • 向量量化算法:层次K均值树(HKM tree);
    • 基于图的算法:NSW。

第14章 点击率预测模型

  • 点击率预测建模为"回归问题"而不是"排序问题",因为点击率要用于预估eCPM以便出价。

14.1 点击率预测

  • 基本模型:逻辑回归;
  • 优化算法:L-BFGS、置信域法;
  • 校正:正负样本不平衡问题;
  • 特征:

    • 特征的非线性化:分桶、平方、log、根号;
    • 特征组合;
    • 动态特征:某个特征组合的历史点击率;
    • 偏差与CoEC(click on expected click):

      • 原因:比如广告位带来的点击率偏差,顶部广告位和底部广告位的点击率差异很大;
      • 解决:对不同的广告位预估"期望点击率"(EC),CoEC=某广告点击率/广告位期望点击率。
      • 常见的偏差:广告位位置、广告位尺寸、广告投放延迟、日期和时间、浏览器。
    • 平滑:特征缺失问题、该特征样本不足时的统计平滑问题;
    • 评测:ROC;
    • 智能频次控制:将EC计数或者频次计数作为特征加入到模型,抑制高频次广告的投放。

14.2 其他点击率模型

  • 因子分解机(factorization machine,FM);
  • GBDT;
  • 深度学习点击率模型。

14.3 探索与利用

  • 当投放的总是最优的广告的时候,一些长尾广告的特征的采样就会不准确。
  • 强化学习:分出一部分流量用于强化学习的探索和利用(E&E),多臂老虎机问题(multi-arm bandit,MAB);

    • UCB方法(upper confidence bound,置信上界):在每次投放时不简单选择经验上最优的广告,而是考虑经验估计的不确定性,选择估计值上界最大的广告;
    • 考虑上下文的bandit:LinUCB。

第15章 程序化交易核心技术

15.1 广告交易平台

  • cookie映射;
  • 询价优化:每次询价只对可能赢的DSP发起,减轻服务器压力;但要避免某些DSP完全获取不到流量的问题。

15.2 需求方平台

  • 定制化用户标签;
  • 点击率预估:增加CoPC(click on predicted click),真实点击与预估点击的比,对点击率高估和低估的进行修正;
  • 点击价值估计:CPS/CPA/ROI结算时使用,点击价值 = 到达率 * 转化率 * 转化单价;
  • 出价策略:考虑预算约束。

15.3 供给方平台

  • 网络优化:动态决定将广告请求发给哪个广告网络。

第16章 其他广告相关技术

16.1 创意优化

  • 程序化创意:地域性创意(如把用户所在地区的联系电话放到广告中)、搜索重定向创意(如把用户历史搜索词放到广告的搜索框中)、个性化重定向创意(如淘宝的重定向广告都是实时生成的);
  • 点击热力图:统计一个创意的哪个区域最容易被用户点击;
  • 发展趋势:视频化、交互化,承载更多信息。

16.2 实验框架

  • 以用户来分桶,而不是随机分桶(因为多次广告展示之间有相关性)。

16.3 广告监测与归因

  • 广告监测:委托第三家核对实际的展示数和点击数;
  • 广告安全:某些广告放到特定媒体(如低俗媒体)上会有负面效果;媒体会伪装自己的流量以次充好;要确认浏览器确实发生了渲染过程(即广告确实对用户可见);
  • 效果归因:CPA/CPS/ROI结算的广告,需要确认转化数据的正确性,并确定该转化用户是从哪个媒体进入的。

16.4 作弊与反作弊

  • 作弊方法分类:

    • 作弊主体:

      • 媒体作弊:媒体自己构造虚假的点击行为;
      • 广告平台作弊:ADN或ADX构造虚假的点击行为;DSP构造虚假的点击、展示、转化行为;
      • 广告主竞争对手作弊:消耗广告主预算;
    • 作弊原理:

      • 虚假流量作弊(non-human traffic,NHT):构造虚假的展示、点击、转化行为;
      • 归因作弊:将别人带来的转化行为归因到自己名下;
    • 作弊手段:机器作弊、人工作弊。
  • 常见作弊方法:

    • 服务器刷监测代码:用爬虫访问网页让广告主误以为曝光量很大;
    • 客户端刷监测代码:用户访问网页时,网页脚本让用户自动在后台多访问几次,让广告主误以为曝光量很大;
    • 频繁换用户身份:与上面两种方式结合使用;
    • 黑客:黑客控制被感染设备在后台访问网页;
    • 流量劫持;
    • cookie填充:比如用户在淘宝购物时,跳转地址被修改,让淘宝误以为用户是第三方通过第三方网站点击广告过来的;
    • IP遮盖:发现反作弊者时,隐藏自己;
    • 点击滥用与点击注入。

16.5 产品技术选型实战

查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2020-01-07

【读书笔记】计算广告(第2部分)

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~

本文是 计算广告(第二版) 的读书笔记。

该部分介绍在线广告产品的逻辑,面向产品、运营、销售、宏观决策者。

第3章 在线广告产品概览

详见书中的图,对第1部分所讲的在线广告演进历史做了概括。

3.1 商业产品的设计原则

  • 一般产品面向用户,追求更简单、更直观、更快捷;商业产品面向利润,允许引入一些不便。

3.2 广告系统的产品接口

  • 需求方投放接口:一个广告主有多个广告计划(多个合同),每个广告计划下有多个广告组(投放策略),一个广告组下有多个广告创意;
  • 供给方管理接口:添加删除广告位、查看个广告位的运营数据;

第4章 合约广告

4.1 广告位合约

  • 某段时间某个广告位固定投送某广告主的广告,结算方式CPT;
  • 广告主同一个,但广告创意可以根据人群定向。

4.2 受众定向

  • 评价:定向准确率、覆盖率。
  • 定向方法:

    • 地域定向;
    • 人口属性定向:年龄、性别、受教育程度、收入水平等,主要用于品牌广告;
    • 上下文定向:关键词、主题等,ADN首选定向方法;
    • 行为定向:历史访问行为;
    • 精确位置定向:利用手机的GPS,精确到一个建筑物(咖啡馆、美容院);
    • 重定向:以前访问过广告主网站的访客;
    • 新客推荐定向:由种子客户寻找潜在用户;
    • 动态定价:为价格敏感用户显示打折广告;
    • 场景定向:健身、吃饭、看电视、开会。

4.3 展示量合约

  • 流量预测
  • 出价指导
  • 流量分配

第5章 搜索广告与竞价广告

5.1 搜索广告

  • 占整个在线广告市场的一半以上;变现能力远远高于展示广告;
  • 综合搜索引擎广告 + 垂直搜索引擎广告(如淘宝直通车)。
  • 产品形态:北区、东区、南区、原生广告;
  • 产品策略:

    • 查询扩展:搜索广告独有,允许搜索词匹配更多的广告关键词;
    • 广告放置:设定进入北区、东区、南区的条件;

      • NFP(north foot print):北区广告平均条数。

5.2 位置拍卖与机制设计

  • 市场保留价(market reserve price,MRP):广告位的底价;
  • 定价问题:

    • 广义第二高价(GSP);
    • VCG(Vickrey-Clarke-Groves):社会福利最优。VCG机制下广告平台的收入不如GSP。
    • 社会福利最优:广告平台将广告机会分配给后续回报价值最高的广告主,而非广告平台的收入最优。

5.3 竞价广告网络

  • 一般以CPC结算;
  • 联盟广告(affiliate):广告网络向一部分供给方开放广告库供其自行挑选;
  • 产品策略:

    • 广告检索:布尔表达式检索;兴趣、关键字检索;
    • 广告排序:点击率预测,相比搜索广告,数据稀疏、需要考虑上下文和用户信息、不同广告位点击率差异巨大。

5.4 竞价广告需求方产品

  • 搜索引擎营销SEM:帮助广告主选择关键词及出价;
  • 交易终端TD(trading desk):帮助广告主一站式采买,保证展示量以及ROI。

5.5 竞价广告与合约广告的比较

第6章 程序化交易广告

6.1 实时竞价

  • 用户标识映射(cookie映射) -> 广告请求(ad call);
  • 媒体 -> ADX -> DSP -> 广告主网站。
  • "实时"指需求方参与每次竞价,所以搜索广告、广告网络不是实时竞价产品

6.2 其他程序化交易方式

  • 优选(preferred deal,PD):只有一个需求方决定是否投放;
  • 私有市场:参与实时竞价的广告主只有小范围内;
  • 程序化直投:相比合约广告,广告主可以自行决定投放策略和流量分配,属于合约广告和实时竞价的过渡。

6.3 广告交易平台

  • DoubleClick ADX:谷歌收购。

6.4 需求方平台

  • DSP核心特征:RTB、优选等程序化流量购买 + 需求方定制化用户划分;
  • 产品策略:

    • 用户标签 -> 检索 -> 排序 -> 确定候选广告 -> 确定候选广告出价;
    • 面向ADX的出价策略:eCPM + 市价曲线;
    • 面向广告主的定价策略:根据出价确定定价(定价=出价,由于使用GSP所以DSP有利润)。
  • 重定向:网站重定向、个性化重定向、搜索重定向;
  • 新客推荐(look-like)。

6.5 供给方平台

  • header bidding:绕过中间商ADX,由媒体直接向广告主或者DSP询价。

第7章 数据加工与交易

7.1 有价值的数据来源

  • 用户标识:web端cookie映射,IOS端IDFA,Android端Android ID或IMEI;
  • 用户行为:

    • 决策行为:转化(conversion)、预转化(pre-conversion);
    • 主动行为:广告点击、搜索、搜索点击;
    • 半主动行为:分享、网页浏览;
    • 被动行为:广告浏览,某广告浏览的频次与其点击负相关;
  • 人口属性:性别、年龄;
  • 地理位置;
  • 社交关系;
  • 设备信息。

7.2 数据管理平台

  • 简称DMP。
  • 三方数据:第一方指广告主,第二方指媒体,第三方指其他。
  • 第一方DMP,也称数据管理平台,为广告主加工第一方数据;
  • 第三方DMP,也称数据交易平台,收集第三方数据加工后卖给DSP。

7.3 数据交易的基本过程

  • DMP把数据交给ADX,作为ADX的一项辅助服务卖给各家DSP。

7.4 隐私保护和数据安全

第8章 信息流与原生广告

8.1 移动广告的现状与挑战

  • 移动广告占在线广告的份额已经超过一半。
  • 移动广告的特点:定位更精准,场景广告、本地化广告。
  • 移动广告的传统创意创新:

    • 横幅、插屏(应用、游戏暂停时):竞价售卖;
    • 开屏、锁屏:合约售卖;
    • 推荐墙、积分墙:推荐应用下载,下载后可以赚积分。
  • 移动广告的挑战:

    • 应用生态造成的行为数据割裂:各应用独立,整合数据比较麻烦;
    • PC时代的广告主移动化程度不足:广告主的落地页和交互页在移动端体验差;
    • 移动端屏幕小,广告位影响体验。

8.2 信息流广告

  • 广告位适配问题:各媒体平台的原生广告,需要的广告尺寸不同;
  • 广告竞价与放置:同一信息流下的广告构成竞价队列,广告出现在信息流的第几条也需要考虑。

8.3 其他原生广告相关产品

  • 搜索广告:搜索广告本身就是原生广告;
  • 软文广告;
  • 联盟:媒体从广告库中自由选择要推广的对象;原生广告也需要媒体有选择的权力。

8.4 原生广告平台

  • 表现原生与场景原生:

    • 表现原生:广告展示风格和内容展示风格一致;
    • 场景原生:广告的投放逻辑与内容生产一致。
  • 场景的感知与应用:比如推理用户现在在工作还是在休闲。
  • 植入式原生广告。

8.5 原生广告与程序化交易

查看原文

赞 0 收藏 0 评论 0

LogM 发布了文章 · 2019-12-23

【读书笔记】计算广告(第1部分)

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~

本文是 计算广告(第二版) 的读书笔记。

该部分介绍一些基本知识。

第1章 在线广告综述

1.1 免费模式与互联网核心资产

  • 免费模式:以边际成本出售能够规模化、个性化传播信息的商品。

    • 软件的边际成本几乎为0,硬件的边际成本是其量产成本(毛利几乎为0);
    • 矿泉水、充电器等无法传播信息的商品无法应用免费模式。
  • 核心资产:流量、数据、影响力

    • 互联网的免费模式可以盈利,是因为获得这3项核心资产;
    • 这3项核心资产都与广告变现有关,展示广告(流量、数据变现)、公众号软文(影响力变现);
    • 因为是向广告主(后端用户)收费而不是向用户(产品直接用户)收费,称为后向变现

1.2 大数据与广告的关系

  • 大数据定义:4V特征。
  • A类问题:通过数据采样解决复杂度,同时效果没有明显下降;
  • B类问题:数据采样导致效果明显下降,如个性化推荐、计算广告(不能遗漏任何一个用户)。
  • 洞察:数据统计后由人进行决策,如财务报表;
  • 自动化:数据统计后自动决策,如计算广告。

1.3 广告的定义与目的

  • 广告的参与者:

    • 出资人(sponsor)、需求方(demand):广告主(advertiser)、代理商(agency);
    • 媒体(medium)、供给方(supply);
    • 受众(audience、user)。
  • 广告的目的:广告主通过媒体达到低成本的用户接触。

    • 品牌广告(brand awareness);
    • 直接效果广告(direct response)。
  • 成本评价:投入产出比(ROI)

1.4 在线广告表现形式

各表现形式的含义有重叠。
  • 横幅广告(banner ad);
  • 文字链广告(textual ad);
  • 富媒体广告(rich media ad):弹窗、对联、全屏;
  • 视频广告(video ad);
  • 交互式广告(playable ad);
  • 社交广告(social ad);
  • 移动广告(mobile ad);
  • 邮件营销广告(email direct marketing,EDM);
  • 激励广告(incentive ad):返利购买;
  • 团购:本质上属于激励广告;
  • 游戏联运:游戏下载推荐;
  • 固定位导航:门户网站。

1.5 在线广告简史

  • 最初阶段,把网站当做杂志版面投广告,称为展示广告(display advertising),售卖模式为合约广告(agreement-based advertising);
  • 后来,展示广告开始个性化投放,称为定向广告(targeted advertising):受众定向(audience targeting) + 广告投放(ad serving)。

    • 定向广告最早是担保式投送(guaranteed delivery, GD),仍属于合约广告,计费方式为CPM(cost per mille),面向广告主;
    • 竞价广告(auction-based advertising):随着标签粒度越来越细、广告主越来越多,无法准确估算各个标签的流量,且一次展示满足多个合约时如何取舍存在问题。

      • 竞价广告最早来自于搜索广告(search ad)
      • 搜索广告的形式搬到其他媒体上,就形成了上下文广告(contextual advertising)
      • 定价机制为广义第二高价(generalized second price,GSP)。
  • 广告网络(ad network,ADN):完成竞价 + 定向,计费方式为CPC(cost per click)。媒体把自己无法进行合约广告卖掉的库存托管给广告网络;
  • 交易终端(trading desk,TD):广告网络面向受众,不保证广告主的流量,所以需要面向广告主的采买广告的平台。
  • ADN和TD还没有实时竞价的能力。
  • 实时竞价(real time bidding,RTB):广告主需要根据不同的用户实时出价;程序化交易(programmatic trade);
  • ADN不具备实时竞价的能力,所以出现了广告交易平台(ad exchange,ADX),各家ADN在ADX上以RTB的形式售卖,相应的,面向广告主出现了需求方平台(demand side platform,DSP),DSP的核心是ctr预估。
  • 原生广告(native ad):内容与广告统一决策或展示,不再对立。

第2章 计算广告基础

  • 计算广告的核心目标:提高千次展示期望收入(expected cost per mille, eCPM),eCPM = 点击率 * 点击价值;

2.1 广告有效性模型

  • 选择:

    • 曝光:广告位的物理属性;
    • 关注:广告不打断用户任务(不厌烦);传达推送广告的原因;符合用户需求或兴趣。
  • 解释:

    • 理解:用户能理解的兴趣范围;与关注程度相匹配的理解门槛;
    • 接受:创意(幽默、性感)可能带来负面效果;合适的广告应出现在合适的媒体上。
  • 态度:

    • 保持:创意,留下深刻印象;
    • 决策:带来转化行为。

2.2 互联网广告的技术特点

  • 技术和计算导向:定向、竞价(预估+优化);
  • 效果的可衡量性:点击率、展示率;
  • 创意和投放方式的标准化:创意尺寸标准化、关键接口标准化;
  • 媒体概念的多样化:门户网站、垂直网站、搜索引擎、电商网站、返利网...
  • 数据驱动的投放策略。

2.3 计算广告的核心问题

  • 广告收入的分解:

    • 点击率CTR(click through rate);
    • 到达率:落地页打开次数与点击次数的比例;
    • 转化率CVR(conversion rate):转化次数与到达次数的比例。
  • 结算方式:

    • CPT(cost per time):将广告位以独占形式售卖;
    • CPM(cost per mille):千次展示结算,品牌广告中常见;
    • CPC(cost per click):按点击结算,效果广告中常见;
    • CPS(cost per sale)、CPA(cost per action)、ROI结算:按销售订单、转化行为、ROI结算,淘宝客、移动应用下载。

2.4 在线广告相关协会

  • 交互广告局(IAB):面向供给方利益,Google、Facebook、Yahoo、Microsoft;
  • 美国广告代理协会(4A):线上线下各种广告,主要是品牌广告代理商,奥美、智威汤逊、麦肯;
  • 美国国家广告商协会(ANA):面向需求方利益,AT&T、宝洁、NBA。
查看原文

赞 1 收藏 1 评论 0

LogM 发布了文章 · 2019-12-18

【读书笔记】计算广告学 Mooc

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~

本文是 计算广告学Mooc 的读书笔记,Mooc讲得比较宏观,没涉及太多具体技术


1. 广告的基本知识

1.1 广告的目的

  • 品牌广告:记忆
  • 效果广告:转化

1.2 广告的有效性模型

  • 选择:

    • 曝光:广告位好不好
    • 关注:不打断用户任务、明确揭示推荐原因、符合用户兴趣和需求
  • 解释:

    • 理解:用户能理解、与关注程度相关的理解门槛(电视购物理解时间长,互联网购物理解时间短)
    • 信息接受:广告商的认可度、广告位(媒介)的认可度
  • 态度:

    • 保持:艺术性带来的记忆效果
    • 购买:在用户的价格敏感接受范围内

1.3 广告与营销的区别

  • 广告目标是接触到潜在用户,销售目标是接触到有明确需求的用户

1.4 在线广告的独特性

  • 技术和计算导向
  • 可衡量性:点击可衡量广告效果,但不是完全正确
  • 标准化:不同人群有不同广告,所以广告的尺寸等都得标准化
  • "媒体"概念差异化:门户、搜索引擎、淘宝网属于不同的"媒体",处于supply到demand的不同阶段

1.5 在线广告市场

1.6 计算广告核心问题和挑战

  • 大规模:百万量级的页面,十亿量级的用户;高并发;延迟要求
  • 动态性:用户兴趣的变化
  • 丰富的查询信息
  • 探索与发现:主动投放一些探索广告以获取数据

1.7 广告、搜索与推荐的比较

  • 搜索:相关性;垂直领域;十亿级;较少个性化需求;检索信号较集中
  • 搜索广告:ROI;质量、安全性;百万~千万级;较少个性化需求;检索信号较集中
  • 展示广告:ROI;质量、安全性;百万级;亿级用户的个性化;检索信号较丰富
  • 推荐:用户兴趣;多样性、新鲜度;百万~亿级;亿级用户的个性化;检索信号较丰富;有downstream优化(针对一整套点击的优化,而非只关注一次点击)

1.8 投资回报率(ROI)分析

  • 投入 = 采买价格
  • 回报 = 点击率(CTR, click-through-rate)*点击价值 = eCPM(预期的CPM,每千次展示付费)
  • CPM市场:eCPM固定,常见于品牌广告
  • CPC(每次点击付费)市场:动态CTR,固定点击价值
  • CPA(每次行为付费)/CPS(每次销售付费)/ROI市场:动态CTR,动态点击价值;只适用特殊场景

1.9 在线广告系统结构

  • query -> 召回 -> 排序
  • 受众定向平台(离线):数据挖掘
  • ad server(在线): 高并发;十毫米实时决策;百亿次/天
  • 数据高速公路:内部及外部TB级数据实时收集处理,收集在线端输给离线端
  • 流式计算平台:日志的准实时挖掘和反馈,反作弊和计价

2. 合约广告系统

2.1 常用广告系统开源工具

2.2 合约广告简介

媒介(supply)为广告的展示量或者转化量做担保
  • 直接媒体购买:比如向报纸买一个专栏广告;讲这个是为了引出下面两个合约广告
  • 担保式投送(GD):基于合约,没达到展示量要赔偿;量优先于质;CPM方式计费
  • 广告投放机(ad server):受众定向、CTR预测、流量预测

2.3 在线分配问题

  • adwords problem -> display problem

2.4 Hadoop介绍

3. 受众定向

3.1 受众定向概念

  • 为A(广告)U(用户)C(上下文)打标签

    • 重定向:如果用户以前访问过某广告主的网站,则打标签
    • 地域/人口属性(男女、收入)
    • 上下文
    • 行为定向:包括站内站外
    • 网站/频道:财经、汽车等
    • Hyper-Local:非常细的地域定向,细到一个建筑物(咖啡馆等)
    • Look-alike:挖掘与历史消费用户相似的潜在用户

3.2 行为定向

  • 重要性排序:transaction(直接的交易行为)、pre-transaction(如商品浏览)、paid search click(搜索广告的点击)、ad click(普通广告的点击)、search click、search、share、page view、ad view

3.3 上下文定向

  • 半在线打标签

3.4 主题模型

  • PLSI
  • LDA
  • GaP

3.5 数据加工和交易

4. 竞价广告系统

4.1 位置拍卖理论

  • VCG理论:某对象的收费应等于给他人带来的价值损害;实际中很难算
  • 广义第二高价:比下一位出更高的价;与VCG机制相比,会收取广告主更多的费用;在线广告广泛采用

4.2 广告网络概念

4.3 广告检索(召回)

  • 布尔表示式检索:二层倒排
  • 长query:WAND检索算法

4.4 流量预测

  • 将a视为query,召回(u, c);预估某个广告主的流量

4.5 zookeeper介绍

  • 分布式同步服务

4.6 点击率预测与逻辑回归

  • 回归比ranking合适,因为要估计CTR
  • 冷启动
  • 动态特征:快速调整特征;在线学习:快速调整模型

4.7 逻辑回归方法介绍

  • BFGS
  • ADMM

4.8 动态特征

5. 搜索广告与广告网络

5.1 探索与利用

  • 针对长尾的广告,创造展示机会
  • 基本方法:小流量随机探索

    • UCB:通过以往观测值计算每个广告的期望收益,选择期望收益最大的广告进行投放,观测结果用于调整下次计算;随着观测次数的增多,会逐渐收敛

5.2 搜索广告

  • 特点:用户定向特征弱,上下文特征强(短时用户行为)
  • 查询词扩展:基于推荐(向量相似度)、基于语义(主题模型)、基于历史数据统计

5.3 流式计算平台

5.4 广告购买平台

  • 帮助广告主采买媒介,并优化ROI

6. 广告交易市场

6.1 广告交易市场

6.2 实时竞价

  • Adx(ad exchange)实时向DSP询价

6.3 Cookie Mapping

6.4 SSP

  • Supply side platform

6.5 DSP

  • Demand side platform

6.6 DSP流量预测

  • 只能利用历史竞价信息,很重要,但暂无较好的解决方案

6.7 DSP点击价值估计

  • 比较难:数据很稀疏,不同类型广告的点击价值差别很大(电商、游戏)

6.8 DSP重定向(Retargeting)

  • 比如:在淘宝购买或者浏览了某商品,之后其它网站会出现淘宝广告

6.9 需求端推荐方法

6.10 广告流量交易方式

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 26 次点赞
  • 获得 2 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 2 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2019-05-11
个人主页被 4.5k 人浏览