精华内容
下载资源
问答
  • 常用的位置广告分类
    千次阅读
    2021-07-28 00:29:24

    本篇主要内容大纲:

    一、信息流广告基本介绍

      • (一)信息流广告的定义和特点

      • (二)信息流广告的行业发展

      • (三)信息流广告在产业链中的主要角色

      • (四)信息流广告常用术语

    • 二、广告投放流程

      • (一)开户

      • (二)充值

      • (三)审核

      • (四)数据监测

      • (五)计费

    • 三、广告投放的基本原理

      • (一)定向

      • (二)创意

      • (三)竞价

    • 四、媒体平台的广告配置后台

      • (一)媒体资源

      • (二)媒体后台

      • (三)后台主要功能

    • 五、信息流广告的创意

      • (一)信息流广告创意的特点

      • (二)信息量广告创意制作

      • (三)信息流广告创意的基本原则

    • 六、视频创意方法

      • (一)创意内容的常用思路

      • (二)常用的爆款套路

    • 七、数据分析

      • (一)广告分析的指标

      • (二)数据分析的基本思路

      • (三)信息流广告的规律

      • (四)信息流广告数据的特点

      • (五)账户调整”三板斧“

    • 八、 推荐资料和工具

      • (一)资料

      • (二)广告学习的平台

      • (三)查看数据的平台

    一、信息流广告基本介绍

    • 电视、报纸、杂志、广播被合称为四大传统媒体,和传统媒体广告对应的是网络广告

    • 在各种形式的网络广告中,移动广告因手机的普及而成为新的中坚力量,信息流广告就是其中的代表

    (一)信息流广告的定义和特点

    • 信息流(feed)广告,是在内容流中穿插展现的广告,常出现在社交网络、资讯媒体和视频平台,以文字、图片、视频或它们相结合的方式展现,主要出现在移动端,通过平台发出,明确标注“广告”两个字

    • 将用户自发发布的内容叫作“内容”,将给平台带来明确收益的商业推广叫作“广告”

    • 信息流广告起源于社交网络

    • 信息流广告的一大优势是原生,即广告和环境内容在形式上高度相似,能通过推荐算法确保广告精准匹配用户,对不同的用户展现不同的广告,也就是所谓的“千人千面”,实现广告和用户的精准匹配

    • 精准匹配的背后隐藏着什么技术呢?用户的每一次上网行为都会留下痕迹(点击、搜索、浏览等),媒体通过一定的技术手段对用户行为数据进行搜集分析,从而形成对用户偏好的判断。再结合具体的环境(时间、网络环境和位置信息等),向用户推荐其可能感兴趣的广告,从而提升广告和用户的匹配度,促进用户转化

    • 转化效果是大家最关心的,信息流广告的投放都在线上,广告投放效果能够量化,用户各个维度的数据也都可以被统计到,信息流广告一般被认为是效果广告

    • 「效果广告」:希望借助媒体的力量来快速接触大量用户,以达到宣传品牌形象、提升中长期购买率与利润空间的目的;希望能利用广告手段马上带来大量的购买或其他转化行为

    • 信息流广告的原生性及对目标用户的精准匹配,提高了广告投放的效率

    • 搜索广告是基于用户的主动搜索行为,信息流广告是用户被动接受信息

    • 对媒体而言,用户使用时间越长,就越有机会展示广告,从而赚到更多钱,所以这是至关重要的

    (二)信息流广告的行业发展

    • 广告设计的思路就是在用户关注度高的地方拦截用户的注意力,让用户顺便或者不得不看到广告

    • 「开屏广告」指在 App 启动时占据屏幕大部分或全部面积的广告,一般停留 3~5 秒,一闪而过,也叫“闪屏广告”。它出现在用户进入 App 的第一入口,覆盖面最广,价格一般也相对较高,会有用户“误点”的情况,开屏广告的点击率比其他广告高一些

    • 「banner 广告」就是横幅广告,以通栏或矩形框的形式出现在页面中,一般展现在用户停留较久或者访问频繁的页面上,是网络广告最早的展现形式,但是点击率相对比较低

    • 「插屏广告」一般出现在 App 暂停或场景切换的时候,以全屏、半屏的方式弹出。常见的场景有视频前贴、暂停、后贴、游戏暂停、过关和图书翻页等,能减少广告对 App 固定界面的占用,视频和游戏等产品多采用这种广告形式

    • 「激励广告」多为视频形式,通过设置奖励来吸引用户主动观看广告。激励广告多出现在游戏里,给用户的奖励通常是人物复活机会、一些道具或者特权等

    • 激励广告有两个主要特点

      (1)保证广告播放时长。用户一旦选择看广告,就必须播放完毕才能领取奖励

      (2) 用户对广告的接受程度相对较高。因为是用户主动选择播放广告,并且播放完毕可以获得直接收益,所以从一定程度上确保了广告的效果

    • 「搜索引擎广告」是通过用户搜索关键词而触发的广告。搜索引擎广告是典型的原生广告,广告的样式和搜索出的词条内容非常相似,并且广告的内容和用户的搜索意图相关,转化效果较好

    • 「信息流广告」是媒体主动推荐给用户的广告,可以出现在任意内容中间,搜索引擎广告是用户搜索关键词之后才能展现的,局限性很强,信息流广告的曝光机会更多

    • 信息流广告的一些优势:广告的展示基于用户兴趣,千人千面;很适合移动端的碎片化阅读;在信息流中插入一条广告也不会特别干扰用户

    • 流量通常意味着收入,信息流广告是流量变现的一种高效方式

    • “流量”指一定时间内网站的用户访问量,可以体现网站的人气

    (三)信息流广告在产业链中的主要角色

    • 信息流广告的产业链主要由三方组成,分别是媒体、广告主和代理商

    • 「媒体」:流量供给方

    • 「广告主」:流量需求方,希望通过广告来获取用户或者促进销售,是这个产业链中的甲方

    • 「代理商」:提供优化服务的一方,帮助广告主提升广告投放效果,一般招募大量优化师,广告需要创意,广告主希望通过广告来和目标用户沟通,“说服”的过程就需要创意,广告投放过程中还需要进行一系列管理

    • 媒体的主要工作是通过技术提升广告效果,让广告主买单,信息流广告是效果广告,能让广告精准匹配目标用户,这个匹配过程靠的就是媒体的算法,算法能力是一个媒体的核心能力

    • 甲方获客都是其核心诉求,通过广告增加曝光,几乎是每一个产品必不可少的营销方式,传统企业投放信息流广告的比较少

    • 广告主直接和媒体合作,由媒体提供优化服务,这种合作模式叫“直签”,意思是直接跟媒体签合同,广告主虽然和代理商合作,但是不需要代理商提供优化服务,他们自己有优化人员,这种合作模式叫“自运营”,代理商会提供优化服务,代理商会借钱给甲方,业内叫“垫款”,代理商可以帮忙垫款,这种短期资金周转往往会让广告主选择和代理商合作

    • 代理商一般根据服务的广告金额从媒体处获取佣金,称为“返点”,返点一般为6%~10%,也有部分媒体返点能达到20%以上

    • 流量(用户)是这个产业链的核心,媒体拥有流量,卖广告;广告主需要流量,买广告;代理商服务买卖的过程

    • “先获取用户,再卖广告”是一个很强的商业模式,让很多免费的互联网产品也能赚到钱

    (四)信息流广告常用术语

    • 广告经过了“选定广告给谁看,给用户看什么,广告之间的 PK”3 个步骤,最终出现在了手机上

    • 做广告投放的主线,简称定向、创意和竞价

    • 「PV(page view)」:页面浏览量,是评价网站流量最常用的指标之一

    • 「UV(unique visitor)」:独立访客数,和 PV 的区别在于去重

    • 「DAU(daily active user)」:日活跃用户数(简称日活),也就是每天使用产品的用户数,是一个用来评价产品用户量的指标

    • 「MAU(monthly active user)」:月活跃用户数(简称月活),即每个月使用产品的用户数,也是反映产品用户量的指标

    • 「展示(show)」:广告被一个用户看见一次称为一次展示,展示也称为曝光,曝光量是广告投放最基础的数据指标

    • 「点击(click)」:一般点击的人数会比展示少很多,多数情况下还是感兴趣

    • 「CTR(click through rate)」:点击率,用来反映用户对广告感兴趣的程度,「CTR= 点击数 / 展示数」

    • 「消耗(cost)」:一般指广告花费,也叫花费或消费。投放广告得花钱,统计消耗一般精确到“分”

    • **CPM(cost per thousand impression,cost permille):**每千次展示成本(也叫千人成本),也就是广告每展示 1000 次的费用(或者广告送达 1000 人所需要的成本),一般用“千次展示”来衡量广告展示的价格,「CPM= 消耗 / 展示数×1000」

    • 「CPC(cost per click)」:每次点击的成本(即点击成本),「CPC= 消耗 / 点击数」

    • 广告主投放广告,最关心的两个指标就是量级和成本,量级是指获得的用户量,成本是得到这些用户付出了多少钱

    • 「下载」:下载又细分为“下载开始”和“下载完成”两个指标。下载开始是指点击了下载按钮,下载完成是指将 App 安装包完整地下载到手机上

    • 「安装」

    • 「激活」:一般指首次联网打开应用,激活成本是广告主比较关注的

    • 「注册」:一般指填写用户信息,成为某个产品的用户

    • 「付费」:用户在使用产品的过程中产生了实际花费。通常,盈利是产品的最终目的,付费是非常关键的指标

    • 用广告消耗除以这些指标,就是每一步行为对应的成本

    • “终极”指标:「ROI(return oninvestment,投资回报率)」,ROI 的计算方法是用广告投放的产出除以广告投入,广告主常用 ROI 来判断广告投放的效果,「一般以 1作为衡量 ROI 的标准,能到 1 就算没赔」

    • 留存和时间联系在一起,一般以“日、周、月”为单位。比如“次日留存”是指在当天新增的用户中,第2天登录App的用户数。“七日留存”是指在当天新增的用户中,第7天还登录的用户数。对于工具类产品,留存是非常重要的指标

    二、广告投放流程

    • 5 个步骤:开户、充值、审核、数据监测和计费

    (一)开户

    • 获取广告账号的过程也叫开通账户,简称“开户”

    • 在投广告之前需要准备一些材料,媒体审核通过后,才能投放

    • 广告账户也会有相应的账号和密码,账号一般是邮箱地址或手机号

    • 账户是广告主操作广告投放的地方

    • 媒体需要对广告内容负责,媒体会对广告主的行业和产品进行限制,法律规定一些行业和产品是不允许投放广告的

    • 有一些行业投广告可能不违法,但是平台出于对自身形象、用户体验上的考虑,会对广告有进一步的限制

    • 有一类行业是大家默认不能开户的,就是各自的“竞品”

    • 在申请开户的时候,广告主需要提交一些资质文件给媒体,证明企业和产品的合法性。一般必备的资质文件是营业执照和对应的行业资质文件

    • 如果材料准备齐全,一般在 2 个工作日之内就能成功开户

    • 各媒体也会有一些集中的总结,罗列出了行业的限制、对开户资质的要求等,供广告主提前查看

    (二)充值

    • 广告投放也需要先把钱给媒体,然后花多少扣多少。如果账户余额为 0,那么广告就会马上被系统停止投放

    • 各媒体会有最低充值金额的限制

    (三)审核

    • 平台需要对广告内容负责,国家也要求“压实互联网平台主体责任”,必须要经过媒体审核,确保内容是合规的

    • 不能出现虚广告;不能涉及色情、暴力的内容;不能有保证性的承诺;不能贬低别人;不能侵犯版权;不能用“国家级”“最高级”“最佳”等用语;需要加一些提示语

    (四)数据监测

    • 数据监测用来确保广告投放数据的真实性和准确性

    • 广告里的监测指标主要有展示、点击、下载、激活、注册、下单和付费等行为

    • 完整的数据监测能够为后续跟踪广告投放效果、分析用户行为等工作打下基础

    • 广告中常见的投放目的有两种:增加 App 下载量和增加页面浏览量

    • 「落地页」一般指点击之后的详细页面,这个页面起到了承接和进一步介绍的作用,所以也叫“承接页面”,也叫“着陆页”或“引导页”

    • 投放落地页常见的目的有引导下载、搜集信息(例如电话号码)和售卖商品

    • 下载链接本身可以用来监测数据,在投放 App 下载的时候,有两种数据监测方式,一是用下载链接监测,二是用专门的监测链接,一般认为专门的监测链接数据会更准确一些

    • 落地页链接本身也可以用来监测数据,也支持用专门的监测链接进行监测

    • 优化师比较重要的工作是要注意分渠道,即使在一个媒体上,也可以分不同的渠道,在区分渠道的时候,一般会在链接里加一个“渠道号”,这个渠道号不影响实际页面的内容,但能用来统计后续的数据

    • 页面内容都是一样的,只是在链接的末尾加上了渠道号

    • 实际操作的时候,一般一个媒体会有 5 条以上的链接,用来区分不同创意和定向等因素

    • 分渠道就是“区分不同来源的数据”,是做数据监测至关重要的一步,也是比较容易出错的地方

    • 点击下载链接之后,就会显示开始下载;点击落地页链接之后,会跳转到一个页面,页面上是有内容的;点击专门的监测链接之后,没有内容,而且监测链接一般比较长

    • 数据监测可以是广告主的公司自己做,也可以应用第三方数据监测公司的服务,常见的数据监测公司有秒针系统(Miaozhen Systems)、AdMaster(精硕科技)、热云、TalkingData 和友盟等

    (五)计费

    • 广告主要在一个媒体上投广告,就相当于要在一个媒体上买曝光,得先了解收费规则,一种是媒体定价售卖,另一种是拍卖

    • 「媒体定价售卖」价格相对比较高

    • 现在互联网广告主流的售卖方式是「拍卖」,媒体设置好一个底价(通常会非常低),然后买家出价,相互竞争,价高者得

    • 媒体通过算法技术,时时刻刻都在进行流量的拍卖会,系统自动核算此时的买家都有谁,分别出价多少,然后按照出价从高到低分配流量

    • 拍卖的特点:

      (1)最终的成交价是由市场竞争决定的,而不是媒体单方面来定价,对广告主来说更公平

      (2)对媒体来说实现了利益最大化,曝光始终是卖给此刻出价最高的人

    • 3 种参与出价的方式:

      (1)按展示出价:每一次曝光最高愿意出多少钱

      (2) 按点击出价:每一次点击最高愿意出多少钱

      (3) 按转化出价:每一次转化最高愿意出多少钱

    • 展示、点击和转化在用户行为上越来越深,并且人数会越来越少,最终呈现出漏斗状,每多一步、人就少一点

    • 广告中对转化常见的定义有激活、注册或者付费等

    • 按转化出价,都是广告主预先定义好了什么叫转化行为,然后按这种行为来出价

      (1)按展示出价,媒体会帮助找到展示成本最低的用户,也就是降低 CPM

      (2)按点击出价,媒体会帮助找到点击成本最低的用户,也就是降低 CPC

      (3)按转化出价,媒体会找到转化成本最低的用户,也就是降低转化成本

    • 绝大多数广告主都愿意按照转化出价来投放

    • 每一种出价方式有相应的计费点,目前主流的方式是按转化出价但是按展示或点击计费

      (1)“计费点为展示”的意思是广告展示了就收钱,一次曝光收一次钱

      (2)“计费点为点击”的意思是广告免费展示,只有用户点击了才会收费。相对于展示,计费点更靠后了一步

    • 转化出价是一种非常受欢迎的出价方式,它极大地降低了广告投放的风险

    • 广告是按照拍卖的方式来卖的,出价方式和计费点之间有一定对应关系

    • 媒体计费是随着广告投放实时扣费的,鼓励广告主出更高的价格

    • 各媒体多采用“第二价格密封拍卖”,意思是竞争者们不知道互相的出价,并且最终收取的费用并不是按获胜者自己的出价,而是按照自己下一名的出价,再加一个很低的溢价,常见的是 0.01 元,广告里也称为“广义第二计费”(generalized second-price auction,「GSP」

    • GSP 的 3 个特点

      (1)扣费不直接等于出价

      (2)扣费是不确定的,因为不知道下一名的出价是多少

      (3)通常,实际扣费比出价略低一些

    • 目前,“广义第二计费”机制被绝大多数竞价广告采用,能够避免价格大幅波动,还能够让广告主主动出更高的价格

    • 广义第二计费机制的实际扣费取决于其他出价者,只要他们的出价不变,你调价格也没用(甚至可能因为调得过低而竞价失败,广告展现不出去),广告主只用出自己能接受的最高价格就可以了

    三、广告投放的基本原理

    • 一条广告最终能够展现出来,幕后需要经历「选定广告投放的人群、准备广告投放的物料和与其他广告主 PK」(广告投放三部曲)

    • 广告要重点投给核心受众看,每一类用户有相应的喜好,要用用户喜欢的方式来和他们沟通

    • 「投放广告的第一步:选定广告投放的人群」,即解决“选定广告给谁看”的问题

    • 「广告的第二步:准备广告投放的物料」,即解决“给用户看什么”的问题

    • 「投放广告的第三步:与其他广告主 PK」,也就是“广告之间的 PK”

    (一)定向

    • 产品一般会对自己的目标用户有一个用户画像,包括年龄、性别和几线城市等

    • 媒体提供人群划分维度供广告主选择,支持定位到用户的性别、地域和婚恋状况等

    • 用媒体支持的方式圈出自己想要的用户

    • 广告能够精准地投放给目标人群,大大节省广告费用。定向就是其中关键的一环

    1. 产品的用户画像

    • 一个产品都有自己的定位,主要面向什么样的用户群,也就是用户画像,产品的用户画像一般可以从年龄、性别、地域和收入情况这几个方面进行概括

    • 优化师对用户画像的了解可以直接来自于广告主,广告主一般会根据产品的特点给到目标用户画像

    • 下载一个 App,体验一下这个产品,这是最直接的

    • 在应用商店里搜索这个 App,重点关注简介和用户的评论

    • 也可以在网上搜索相关信息,进一步了解,能找到一些专门机构做的用户画像分析

    2. 媒体支持的定向

    • 定向的本质是找人

      (1)用户基本情况:性别、年龄和地域

      (2)兴趣:用户对什么感兴趣

      (3) 自定义人群:可以对人群做更灵活的处理,也支持广告主自己上传一些人群数据,一般称为人群包

    • 性别、年龄和地域是三大基础定向,也是对用户最基本的区分

      (1)性别会分为男性、女性和不限

      (2)年龄一般按年龄段区分,有的平台可以自己选择年龄范围,定向中的年龄和用户的实际年龄不一定完全一致,有的是媒体基于用户阅读、社交等行为分析出来的推断年龄

      (3)地域定向是对用户的地理位置做区分

      (4)媒体会提前准备好兴趣的分类,其中包含了各个行业,从粗到细做好了划分,供广告主选择

      (5)广告主将用户的设备号或手机号上传到媒体后台,然后媒体看看这些用户有多少在我的平台上,广告只投给重合的这部分用户或者屏蔽这些人

    • 每一台手机都会有一个设备号,一般以IMEI号或IDFA号作为用户设备的唯一标识

    (二)创意

    • 广告文案 + 视频(或者是图片)就是一条广告最重要的组成部分,可以把它称作广告创意,在广告里也叫“素材”,广告创意好不好,决定了用户会不会点击这条广告

    • 素材指广告投放过程中用到的广告文案(或标题)、图片和视频,也称为创意,一般不包含落地页

    • 在信息流广告里,对用户行为有“前端”和“后端”之分,前端指媒体端,后端指广告主端,一般将媒体能直接收集到的行为算作前端行为,将媒体收集不到的行为算作后端行为

    • 常见的前端行为有展示、点击、下载和安装等,常见的后端行为有激活、注册和付费等

    • 投放 App 下载的时候,广告展现给用户的是“广告文案+视频/图片”和“应用介绍页面”

    • 广告主投广告还有一个非常常见的目的:获得销售线索或者直接卖东西,广告主花钱是为了让用户看到一个页面,这个页面统称为落地页

    • 无论投放 App 下载还是投放落地页,准备给用户看的内容都包含两部分:用户首先看到的“广告创意”和点击之后的“详细页面”

    (三)竞价

    • 广告的售卖已经能够支持实时竞价和动态竞争,媒体一直能把广告卖给对自己收益最高的人

    • 在 PK 的过程中,对广告主而言有两个关键指标——「预算和出价」

    • 媒体会严格遵守预算的设置金额,让“实际花费≤预算”

    • 预算分为日预算和总预算,日预算就是每天打算花多少钱,今天花完了这些预算,明天又有这些钱;总预算是一共只打算花多少钱,花光了广告就自动下线

    • 预算可以实时调整,开始不知道广告效果,就可以先少投点,由广告主自己决定

    • 预算是广告主投放广告非常重要的指标,也可以说是生命线,钱一旦花出去就要不回来了,所以一定要格外小心

    • 决定广告主花多少钱的因素除了预算以外,还有出价

    • 如果使用的是转化出价,那么广告投放的风险就会很低

    • 转化出价直接决定了广告投放的成本,出价越低,成本就越低

    • 广告主有自己决定出价的自由,但也要考虑媒体卖不卖给你广告

    • 媒体卖曝光也一样,谁的出价高就卖给谁

    • 常见的出价方式有 3 种:按展示出价、按点击出价和按转化出价,无论是哪种出价方式,媒体卖的都是广告展示数

    • 媒体关心的是每一个曝光能有多少收益,即 CPM

    • 广告后台会对 CPM 进行预估,「eCPM」 基本上是 CPM 的预估值,计算eCPM 的过程中也需要使用预估点击率和预估转化率

    • 媒体会通过算法将出价换算成曝光价格

    • eCPM 的计算方式

      (1)按展示出价:eCPM=CPM 出价

      (2)按点击出价:eCPM=点击出价×(点击数 / 展示数)×1000,即eCPM=点击出价×点击率×1000

      (3)按转化出价:eCPM=转化出价×(转化数 / 展示数)×1000 ,即eCPM=转化出价×转化率×1000

      (4)也常定义转化率=(转化数 / 点击数),这时在按转化计算出价的时候,就需要考虑点击率,即 eCPM=转化出价×点击率×转化率×1000

    • 在信息流广告里,常把点击率叫作CTR,转化率叫作CVR,转化率可以指点击到转化,也可以指展示到转化,没有特殊说明的话一般指点击到转化

    • 计算eCPM的公式常写作:eCPM=转化出价×CTR×CVR×1000

    • 转化出价可以等同于获取用户的成本,说明在投放广告时,可以通过优化广告创意、落地页和人群定向等方式来提升点击率和转化率,进而提升 eCPM,最终用比较低的成本获得用户

    四、媒体平台的广告配置后台

    (一)媒体资源

    • 一家媒体商业化有两个核心考量因素:一个是活跃用户量,另一个是怎样把这些用户变现

    • 一个产品要做广告植入,首先要考虑的是用户体验,然后是展现量,“怎样在曝光量大的位置,尽量自然地插入广告”,是媒体一直在思考的问题

    • 进行植入,在字节跳动旗下的 App 上,用户常见的行为有 3 个:在首页上浏览内容,点击之后进入详细页面继续观看,搜索关键词

    • 媒体设立了相应的广告位:信息流广告、详情页广告和搜索广告

    • 用户进入 App 后,在首页最先看到的就是信息流广告的位置,其展现量很大,是核心的广告位

    • 列表页是指以卡片形式逐条展现标题和摘要(含缩略图)的页面

    • 详情页广告指在列表页中点击文章或视频之后,出现在文章或视频下方、相关阅读上方的广告,一般用户向下滑动并查看评论的时候,就会看到详情页广告,它和信息流广告的区别是它出现在“点击之后”的页面中

    • 在用户输入话题或关键词之后,搜索结果页中展现的广告

    • 广告位于内容视频尾帧,视频播放完之后出现,一般展示时间为 15 秒或 30 秒,曝光时间较长

    • 在视频播放过程中,广告持续出现在用户面前,位置比较显眼,平均曝光时间长

    • 图集尾帧广告是指在组图内容的末尾额外添加了一张图片广告

    • 在广告投放后台,只单独区分了搜索广告和信息流广告

    • 广告位设立的特点:紧随用户使用行为,以原生的方式植入广告

    • 广告展现次序和频率

      (1)广告展现机制可以简单理解成“每隔几个内容展现一个广告”

      (2)广告一般出现在前两屏,很多时候直接出现在第一屏,具体出现的次序跟一屏里的内容条数有关。广告会随着刷新出的内容一起展现,即刷即有

      (3)今日头条 App 的广告位置按“X-Y”来命名,其中 X 指一刷中的第几个位置,Y指第几次刷新(这里的刷新是指手指向下拉或向上推,出现新的信息条目),4-1 就是黄金位置,是指一个用户每天第 1 次刷新时的第 4 个位置

      (4)用户在使用产品时就会出现广告,看到多少广告跟使用时长有关,会有一些频率控制机制来保护用户体验

    • 巨量引擎的广告创意目前有大图、小图、组图和视频这 4 种样式

    • 大图和小图都是单张图,但是图片大小不同,组图是由 3张小图组合在一起的

      (1)大图的版面比较大,占据整个屏幕 1/2 左右的空间,视觉冲击力强,容易引起用户关注,是图片样式中使用频率最高的一种

      (2)组图和小图版面比较小,广告和 App 原生内容相似度很高,更像是一条内容资讯,在原生性上更容易被用户接受,组图比小图表达的信息更多

      (3)视频比图片的表现更加生动,信息传递效率更高,目前已经成为整个巨量引擎最主要的广告表现形式

    • 对于同一个广告创意,竖版展现面积更大,更适应手机屏幕比例,给人沉浸式的体验

    • 抖音只支持视频形式的广告

    • 腾讯平台上的视频广告占比逐渐增长,这也是整体信息流行业的趋势,广告素材在向视频化发展

    • 优化师日常的工作就是和媒体后台打交道

    (二)媒体后台

    • 巨量引擎配有一个微信公众号“巨量引擎广告服务平台”,里面有直播课程、创意思路的分享。媒体功能更新很快,为了及时了解媒体变化,从业人员一般都会关注

    • 媒体的官方公众号是从业人员必须关注的,腾讯广告的微信公众号,叫作“腾讯广告服务号”

    • 传统电商一般是在京东、天猫等电商平台开一个店铺,在店铺里卖东西,需要有客服,也需要长期运营店铺,有一定的成本投入,这种方式也叫「一类电商」

    • 直接在腾讯、字节跳动、快手等媒体平台上卖东西,它的特点是门槛低、好上手,直接在腾讯广告建一个商品介绍页面,然后给这个页面做广告,就能让用户看到这个页面,进而把东西卖出去,这种叫作直营电商,也叫「二类电商」

    • “计划”是最主要的层级,是中坚力量。广告组、计划、创意共同组成了一个账户,它们一层套一层的关系就形成了账户结构,最核心的功能都在第三层级

    • 账户分为 4 个层级,分别是账户、广告组、计划、创意

      (1)“账户”层级既可以查看余额,也可以设置预算

      (2)“广告组”层级主要设置投放目的和预算

      (3)“计划”层级主要设置定向、预算和出价

      (4)“创意”层级主要用来选投到哪个产品和投放的素材

    • 账户的设置项最少;计划的设置项最多;创意是最小的单位,一般和计划连在一起,不单独拆开

    • 开户,是开通整个账户,是针对账户层级的;充值也是针对整个账户进行充值,不能说只给某一个广告组或某一个计划充值,也是账户层级的;广告内容审核针对的是计划和创意,不审核广告组,所以是计划层级的;数据监测是计划和创意层级的;计费也是以计划层级来计算的

    • 计划是最常用的层级,操作也最多

    • 设置好计划后开启投放,计划会自动进入广告拍卖会中,媒体根据 eCPM 的排名进行流量分配,竞争成功的广告会出现在用户面前

    • 最常见的结构是一个账户有多个广告组,每个广告组会有3~5 条计划,每条计划下会有 3~5 条创意

    • 不要把所有计划都放到一个广告组里

    • “销售线索搜集”只在微信里投放,“网页推广”是在非微信里投放的,推广目标是对投放目的的基本筛选,会影响到后面的一些设置项

    (三)后台主要功能

    1. 定向

    • 信息流广告的一个基本思路就是“测试看效果”

    • 投放视频的时候会更愿意选择 Wi-Fi 环境

    • 在终端主要有 4 个定向:App 行为、过滤已安装、平台、系统版本

    • App 行为定向对于竞品的定向是非常精准的,iOS 手机不允许应用读取这台手机上安装了什么 App,所以其上 App 行为的定向不生效,无法使用

    • 过滤已安装对于希望获得新用户的产品,这个是必须选择的定向

    • iOS 手机的价格普遍高于Android,所以用户消费能力可能会更好一点

    • iOS 系统上 App 下载后的激活率普遍高于 Android

    • 一般会认为 iOS 用户更“优质”,而且 iOS 用户更少

    • iOS 平台上广告位的竞争会更激烈,用户获取成本普遍高于 Android

    • 建议 Android 和 iOS 分开进行投放

    • 要明确产品的最低版本,把不符合系统版本要求的用户排除

    • 一般可以从应用商店查找或者询问广告主的技术人员

    • “行为兴趣意向”定向会更细致,分成了行为、兴趣、意向 3 个部分

      (1)行为是指在某个特定场景下有特定行为的用户

      (2)兴趣是指长期对某类事情有兴趣的用户

      (3)意向是指对某类产品或服务有意向的用户

      (4)“行为”是最细分的定向

      (5)三者的确定性是逐渐递减的:行为>兴趣>意向

      (6)三者可以只选择一个,也可以同时使用多个

      (7)定向是逻辑“或”的关系,用户只要满足其中一个条件,就会被选中

    • 目前优化师中比较常见的做法是把“系统优选”当成一个备选,在不同的广告中和人工设置的“行为兴趣意向”定向同时使用,哪个效果好,就多用哪一个,效果不那么理想的,也不用放弃,少用一点就行

    • 要注意精准和用户量的平衡,选得太细了会导致用户覆盖量很少,广告投不出去

    • 人群包常用于广告主对已有用户做二次营销,人群包既可以是广告主自己上传的,也可以是媒体提供的

    • 媒体对人群包的分享一般不是链接形式,而是通过推送

      (1)直接应用人群包做定向(只投放给这部分人)或排除(不投放给这部分人)

      (2)把广告主上传的这部分用户作为种子来拓展相似人群,官方说法叫 Lookalike

    • DMP 就是数据管理平台,广告的主数据和媒体的数据对接到了一块

    • 系统会分析合并同一个人的号码、去掉活跃度过低不适合投广告的号码,因此最终可用人数会有一定比例的减少

    • 在实际投放的时候,起码得有上千个号码才能有分析价值,否则没什么参考意义

    • 扩展人数最小支持 50 万,最大 5000 万,一般情况下,拓展几十倍的效果都还可以

    • 意图定向用来判断用户想干什么以及有什么意图

    • 搜索是用户的主动行为,普遍认为搜索在反映用户的喜好上会更精准

    • 简单来说,因为百度拥有海量的用户搜索行为数据,百度的意图定向非常好用

    • 百度的意图定向按照从粗到细可以分成 3 类:兴趣、意图标签和意图词

    • 意图标签更侧重未来,用来圈定未来可能会干什么的用户

    • 意图词就是具体到对某一个词感兴趣的用户,是非常精准的找用户的方式

    • 在覆盖人群的数量上,兴趣>意图标签>意图词;在精准度上,兴趣<意图标签<意图词

    • 不能只考虑覆盖的用户量大或者精准,要兼顾这两个方面,这样才能使转化成本稳定、转化量大

    • 如果产品的用户比较宽泛(如社交类产品),就可以用兴趣;如果行业比较窄(如租车类产品),就可以多用意图词

    • 意图词是优化师自己来写的,可以由你自己决定

    • 意图词定向的核心就是“想词根 + 拓词”,拓词一般要用工具,“意图词推荐”就是一个非常方便的工具

    • 新兴趣定向和意图词定向尽量分开使用,同时使用会大大限制人群数量,造成广告花钱慢的现象

    • 百度意图定向的使用思路就是找和产品相关的兴趣、用系统推荐新兴趣、写意图词词根、使用系统的“意图词推荐”拓词、剔除和产品无关的内容,核心思路就是“和自己产品相关”

    • 想意图词的工具

      (1)百度搜索下拉框

      (2)百度指数

      (3)关键词规划师

    2. 动态创意

    • 创意是根据用户动态变化的,词包就是动态创意非常典型的形式

    • 动态创意的原理就是基于系统对用户的了解,根据用户身上的标签动态替换标题片段,增加广告和用户的相关性

    • 巨量引擎目前支持地点、日期、星期、手机系统、运营商、区县等词包,最常用的就是地点词包

    • 文案和图片/视频的动态组合叫程序化创意

    • 只需要把准备好的素材都放到指定的地方,然后系统自动帮你排列组合,投放给用户

    • 好处是它会根据投放效果来判断哪个组合是最优的,停掉效果差的,只投放最优的组合

    • 程序化创意能够测试得更充分,系统会分批进行探索,不会一次性投放全部创意,测试成功率更高

    3. 选标题

    • 如果已有创意不行,那么提升效果也不会太理想

    • 巨量引擎广告系统不仅能推荐定向,还能推荐标题

    4. 预算

    • 设置预算的地方:账户、广告组和计划

      (1)账户预算就是整个账户最多花多少钱

      (2)广告组预算是这个广告组最多花多少钱

      (3)计划预算是这条计划最多花多少钱

    • 预算可以设置成具体金额,也可以选择“不限”,决定花多少钱的可不只是预算,还有出价

    • 预算媒体有最低值限制,一般一条计划刚开始投放的时候,预算都会设置得低一点,保守一点会给计划设置 500~1000 元的预算,如果效果好,可以逐步增加预算

    • 「预算如果有交叉,在每一层级都取最小值」

    • 有一种常用的思路是不限制组预算,只用账户预算和计划预算来做限制,只要记得以少的那个为准就行

    • 预算是广告投放里非常重要的东西,甚至可以说是最重要的设置之一

    5. 转化出价

    • 预算和出价共同决定了广告主打算花多少钱,常规的有按展示出价、按点击出价,但优化师用得最多的是按转化出价,因为它风险小、成本好控制,能避免花很多钱但看不见效果的情况

      (1)按展示出价:每一次曝光最高愿意出多少钱

      (2)按点击出价:每一次点击最高愿意出多少钱

      (3)按转化出价:每一次转化最高愿意出多少钱

      (4)广告主按展示出价,媒体帮他找到能展示的人

      (5) 广告主按点击出价,媒体帮他找到最有可能点击的人

      (6)广告主按转化出价,媒体帮他找到最有可能转化的人

    • 用户行为越来越靠后,媒体也可以支持这样的投放目的,能降低广告投放的风险,让广告的回报更大

    • 对接的越深,广告主的回报就越好控制

    • 主流的广告投放都在用转化出价,并且由于广告主对 ROI 的迫切需求,希望广告能直接优化后端效果,所以和媒体对接的数据越来越深入

    • 现在游戏产品的广告主会对接到充值,电商平台的广告主会对接到下单,直接按照这些很后端的行为来出价

    • 现在不对接转化数据,就很难在信息流媒体上获取大量用户

    • 转化出价是你设定的一个转化目标及对应的出价,媒体会按照这个出价帮你去找相应的用户

    • 关键是你设定的目标及目标对应的价格,一般也把“转化出价”叫作“目标转化出价”

    • 根据计费方式的不同,巨量引擎有两种出价方式,分别叫作 oCPC和oCPM

    • oCPC 就是使每一次点击最优,oCPM则是使展示最优,现在主要用 oCPM 的出价方式

    • 在巨量引擎,因为转化目标和转化出价都是在计划层级上设置的,所以也是以计划为单位来进行学习的

    • 针对学习期成本不稳定的现象,巨量引擎做得非常到位,它制定了“赔付规则”

    • 超成本赔付的主要目的是让学习期的计划和成本也能得到,在赔付范围内就可以享受“超成本赔付”的待遇,成本以外多花的钱会自动充值到账户里,这个过程不需要广告主做任何操作

    • 可以将出价×10% 作为调整幅度的参考,一天超过 2 次就算频繁了

    • 每一条计划新投放的 1~3 天成本都会不稳定,成本高的时候也可以先不进行调整和降价,有人给你赔付,就不用心疼成本

    • 转化出价根据付费方式不同,又分为 oCPC(按点击付费)和oCPM(按展示付费),应用得最多的也是转化出价

    • 在投放最开始的几天,如果超成本,媒体也会把钱赔给广告主,媒体一般都会在出价的位置放置成本保障政策的链接

    • “优化目标”就是让广告主自己选择对转化的定义

    • 记得有一个重要的事情,就是“把这一步的数据告诉媒体”,和媒体进行数据对接,否则即使选了,也不会生效。

    • 日期和时间功能就是用来设置广告投放的日期和时间点的

    • 到期开始,过期自动将广告下线,停止投放

    • 投放时间最小以半小时为单位来选择

    • 广告投放不能光看用户量,还要看效果好不好,可以在效果好的时候加大投放预算

    • 从经验来看,大部分广告投放在周末的效果好于工作日,晚上的效果好于白天,白天又好于凌晨

    • 对投放产品的筛选叫作选“广告版位”,广告版位就是对目标用户最基本的筛选,定向是在这个产品的基础上再做更进一步的筛选

    • 在广告版位的选择上,同样分成了“自动版位”和“选定特定版位”两种,操作中常用的办法是:两种都用

    • 相对于媒体自己的流量,大家一般会认为联盟流量的质量更差一些

    • 一家大媒体通常会接入很多中小媒体的联盟流量,中小媒体也会将自己的流量卖给不止一家大媒体

    • 一般把“超过多少个转化之后才赔付”叫作赔付门槛,从大趋势上来看,各媒体的赔付门槛都在逐渐降低,因为随着媒体技术能力的提高以及广告投放数据的积累,媒体对成本的控制会越来越准确

    • 在使用 oCPC 作为出价方式的时候,出价会分成 2 个阶段,分别为点击出价(第一阶段)和目标转化出价(第二阶段)

    • 一般会认为转化出价转化的成本是低的,点击出价转化的成本是高的

    • 百度把转化出价的“学习期”单独拆开了,拆成了点击出价的阶段,用点击出价来度过最开始的学习期

    • 有了第一阶段的探索,模型学习会更充分,后期单元效果可能会更好

    • 即使直接用 oCPC 出价,也有学习期,所以前几个转化成本高也是正常的

    6 投放管家

    • 投放管家承担了账户效果监管的工作,自动进行调价、调预算,大大减轻了优化师的工作量

    • 一般 1~2 周作为前期摸索阶段,快的话不到一个星期就能稳定获取用户

    • 账户层级一般用来设置总预算,在账户层级还需要关注一下账户余额,如果账户里没有钱,是不能投放的,最好要让余额保证有 2 天的费用

    • 预估广告展示数比预估用户覆盖数多很多,一般认为产品预估用户覆盖数在千万级以上,人群覆盖量就是充足的;预估用户覆盖数不足百万,就很可能得不到曝光,导致获取不到多少用户

    • 刚开始的时候,一般不会把所有预算都放在一条计划上,每条计划的初始测试预算在 500~1000 元比较常见

    • 成本一般上下浮动 10% 都是可以的,刚开始投放时可以先将出价设置得低一点

    • 写上计划主要的设置信息,包括定向和出价的特征,由于创意和计划是连在一起的,所以也要写上创意的主要特征

    • 可以用“开关”控制单元的状态,如果效果好,就一直开着;如果效果不好,就考虑关掉,同时补充新的单元,不断新建

    • 每一个单元都有“状态”一项,其中“有效”表示正在投放,点击它,单元的状态就会变成“暂停推广”

    • 为了保证账户效果,我们需要不断新建单元。如果单元效果很不好(比如成本很高),可以关停它

    • 一般地,实际成本超过目标成本一倍就算高

    • “选择已有单元”是一个很常见的操作

    7. 查看数据

    • 观察数据是广告投放至关重要的一步,一方面通过数据能够知道广告投放带来的效果,另一方面要根据投放效果实时对广告的设置进行调整,可以改变出价、预算或者停止投放等

    • “推广”页面的数据会更简洁一些,主要用来实时查看数据;“报表”,主要功能当然是展示各个维度的报表,数据会更全面,还会用图形来直观地展现数据,更容易理解

    • 可以查看账户、广告组、计划、创意各层级的数据,了解每条计划带来了多少曝光、多少转化等

    • 最常用的是分素材统计功能,可以看到每一条素材的数据

    • 巨量引擎支持分小时查看数据

    五、信息流广告的创意

    • 广告的本质是曝光,创意是和用户直接接触的东西,创意是信息流广告最核心的因素

    • 信息流广告中的创意一般指用户在列表页信息流里看到的广告和点击之后的详细页面的设计

    • 入口创意一般由“一句话+图片/视频”组成,详细页面上的创意会更多

    (一)信息流广告创意的特点

    • 信息流广告创意的主要特点就是要“像内容”,也就是原生

    • 广告要在形式上“像内容”,广告的内容也可以向纯内容的创作者们学习,内容是广告灵感的源泉,是始终的学习对象

    • 信息流广告的特点

      (1)信息流广告是效果广告,注重效果而不注重品牌

      (2)在表达方式上,信息流广告普遍很直白

      (3)广告的整体风格都很生活化,“真实”比“高大上”更加分

    • 3 个关键词:效果、直白和生活化

    (二)信息量广告创意制作

    • 投放信息流广告在广告主内部属于市场部的工作内容

    • 优化师也要参与到创意中去,甚至主导创意,优化师一般会对产品和用户有更好的了解,所以经常提需求给设计和视频人员

    • 优化师负责的是大体的风格和内容,创意人员负责把它实现

    • 信息流广告是效果广告,测试成本相对较低,所以有很多试错机会,信息流广告就是一个不断尝试的过程

    • 跟尝试相对应的就是结果反馈,根据数据反馈来调整创意的思路,广告的效果就不行,需要反馈给创意人员

    • 创意还要有“一句话,大部分是要优化师自己来写的,一般不能超过 30个字,媒体也会有“推荐标题”的参考

    • 信息流广告是效果广告,有尝试成本低、数据可以即时反馈效果的特点,更新迭代速度很快,这也造成了信息流广告创意“量产”的现象

    • 好的创意效果会衰退,所以需要快速更新。在比较成熟的代理公司,设计人员每天能做出 4~10 张图片(难易程度差距比较大),视频人员每天能出 2 条视频,算是产量比较不错的了

    • 尝试出好的创意后,创意效果也不会一直好,效果会衰减,这就需要新的创意顶上

    • 优化师每天的日常就是“做素材”(创意也称素材,包含文案、图片、视频和落地页),提需求给设计和视频团队,素材的更新一般以天为单位来进行。一个消耗在 1 万元左右的账户,一周按5 个工作日来算,一周出 2~5 个视频或者 5~10 套图片都比较常见

    • 由于信息流媒体本身就有UGC、大众参与的属性,所以拍摄的水平、广告的画质都有限,短视频的质量无法与专业视频的质量相比

    • 信息流广告的制作成本有限,成本大约只是电视广告的百分之一

    • 信息流广告里“精品化”创意也是行得通的,信息流广告的特点没有变,需要不断测试,素材一旦衰退,就要快速更新迭代

    • 素材来源一般分成外部采购和公司内部团队创作两种,推测是因为想采买一些外部高质量的视频,扩充自己团队的创意

    • 整体来看,创意质量和效果成正比,但不是绝对相关,对用户需求的把握是否准确是关键,表达的主题比制作的水平更重要

    • 想做好创意,也得先找优秀的广告看一看,感受一下它们的风格,学学他们的套路

    • 对信息流广告来说,展示数就是核心指标,展示数大的效果就一定不错

    • 对短视频来说,平台一般会提供“播放量”和“点赞量”,一般在抖音看点赞、快手看播放量就可以了,在抖音,点赞数超过 1000 的广告效果就比较不错,快手播放量超过 10000 的也有一定参考价值

    • 用点赞量、播放量来做判断还是比较可靠的,手机上经常看到的就是好的

    • 看的时候要看内容和广告。可以侧重看广告,看广告会有直接的帮助,但内容的质量普遍更好的,创意也更新奇

    • 学习平台的广告是经过媒体筛选的,一般效果比较好

    • 每天看 50 套素材,先看一个礼拜,也不用限制行业,边看边写

    • 很多优化师也都保持着经常刷广告的习惯,对了解“现在什么样的广告比较火”有一定帮助,能拓展思路

    • 第三方工具的特点是:可以在一个平台同时查看多个媒体的广告创意,比较方便,广告量级比较高,分析维度也更多一些

    • 广告情报工具:AppGrowing

    • 创意展示数大说明广告创意“跑得起来”,也更具参考价值,可以选择“按曝光数降序”排列,曝光数大就是展示数大,相对来说效果会好一些

    • 除了看素材、落地页及文案之外,通过 App Growing 还可以看某个具体的产品在不同流量平台的投放分布

    • 如果投放的是二类电商广告,那么可以多关注该公司的另一款数据产品:快选品

    • 在微信公众号“微信广告助手”的“微助手”中,有“朋友圈榜单”专栏,里面会分季度整理出“用户最喜爱的朋友圈广告 Top 10”

    • 通过看一个账号,可以学习这个产品的完整广告思路

    (三)信息流广告创意的基本原则

    • 广告要有吸引用户的点,这样才容易让用户停下来看一眼

    • 要把重点放在前面,让自己说的话更简练、更明白,重要的地方多强调几遍

    • 做信息流广告最重要的就是“吸引用户 + 看得明白”,先引起人的兴趣,然后把话说明白

    • 先找产品的核心功能,这就是广告主打的点

    • 抓准用户感受,找到用户的需求点,然后用语言表达出来,有啥说啥就行

    • 金钱和美感能够吸引大部分人的眼球

    • 在落地页加上“拆红包”的页面,转化成本能降低 60% 以上

    • 不能直接给现金,便宜点也可以,打折、赠品、限时免费,都是很好用的点

    • 在没有活动时,只要产品是免费的,也可以突出“免费”字样,用户对于免费有本能的喜爱

    • 在标题中你可以使用的最有分量的两个词是‘费’和‘新’

    • 先做产品和用户分析,再做创意

    • 广告要以产品为基础,这是首要的前提

    • 一定要确保广告宣传与产品功能一致,这是投放广告的基本原则

    • 让用户看明白, 3 个关键词:少,清晰,好理解

    • “少”首先是要“字少”。各媒体对文案字数都有要求,常见上限是 30 个字

    • “少”还要“意思少”。一条广告说 1 个点就可以了,最多2 个点,多了就无法突出重点,图片和文案要有联系

    • 如果是视频,那就要情节少,内容短,一般10~30 秒就可以

    • 有主有次就是清晰,所以得有重点,一个画面只突出一个点就行了,不要在一个画面里放太多颜色,背景颜色和文字颜色要区分开

    • 在做信息流广告时,尽量用严肃些的字体,不要用带花样的字体,方方正正的字体是最容易识别的,表达最清晰

    • 用最简单直白的文字来表达就是“好理解”

    • 关键词 + 句式,关键词一般要有实际意义,点出产品或者用户心理;句式是口语化的、疑问的、感叹的都行,仅仅是一种表达方式,没有实际意义,为了吸引用户、帮助用户理解关键词

    • 优化师和设计人员的配合方式有两种:一种是优化师提需求,设计人员自由设计;另一种是优化师提前想好风格,提供图片中的文字甚至素材

    • 第一种情况需要设计人员比较熟悉产品

    • 如果设计人员对产品不那么熟悉,优化师就要提供一些思路和素材

    六、视频创意方法

    • 拍视频一般可以简单分成 3 步:写脚本、拍摄、剪辑

    • 面决定了视频的点击率,封面可以是视频中某个画面的截图,也可以是单独制作的一张比较好看的图片

    • 创意最重要的是表达的意思,也就是创意方向

    • 一般创意的方向会从产品的功能和用户的需求这两个方面来思考

    • 好的创意方向是测试出来的,从很多个方向里测出效果好的方向,然后沿着这个方向做一些拓展

    • 可以参考同行业其他产品的创意方向

    • 有了一个方向,投放一段时间之后(短的可能是 1 周,长的可能是半年),发现这个方向的效果可能没那么好了

    • 找创意方向的能力就是做广告的核心能力,它依赖优化师对产品和用户的了解,也取决于其经验的积累

    • 从产品角度想产品功能,从用户角度想他们想要什么,好的创意方向是不断尝试出来的。对创意方向有想法就去测试,一旦发现一个好的方向就迅速作为重点,使劲投

    (一)创意内容的常用思路

    • 广告的第一个常用思路是“卖什么演示什么”,直接使用产品,用的时候可以从用得好和用得不好这两个方面考虑,既可以挑精彩的部分,也可以挑用得不好的来加点乐子。还可以拓展一下,拿“背后的故事”来做创意

    • 买家秀的创意方式,一定要注意的就是“不要用力过猛”,体现出核心就行了,其他的不重要,一条消息不要打太多字

    • 还有一类创意是“测评”形式的,站在第三方的角度,从开箱开始,展示这个产品的使用体验

    • 测评的关键点是立场,你是第三方,不是卖方,不能只说好话,还是别用力过猛,有吐槽的点就尽管吐槽,这样才像测评

    • 从买家的角度做创意,核心点就是“真实”,多一些聊天的元素、少提产品,切忌“用力过猛”,这样的广告效果就是最自然的,用户也比较容易接受

    • 还有一种比较常用的思路是“故事引入”,把视频广告做成一个情境短剧,在一个故事里植入产品,有点类似于我们在文章里看到的软文或者主播们带货的短视频

    • 通常,短视频的故事背景和情节比较简单,有一个看点就行,有点类似于段子,如果短视频说出了用户的心声、有笑点,那么就会很受欢迎

    • 一个比较常用的三段论:吸引点+矛盾+解决办法

    • 营销的经典“3B原则”:beauty(美女)、beast(动物)、baby(婴儿),这 3 种元素符合人类关注自身生命的天性,更容易赢得消费者的喜欢,在现代社会中,“金钱”也是一个非常吸引人的元素

    • 还有一种比较常用的思路:以问题开头

    • 以一个熟悉的场景开头,给用户代入感,让用户觉得这个片子跟自己有关系

    • 生活里比较常见的场景都可以用在视频中,“与手机相关”的场景更吸引用户,与生活比较贴近,所以会觉得比较真实,用户会比较喜欢贴合生活场景的故事

    • 信息流广告的视频都很短,所以剧情也比较简单,一般就是引入一个日常生活里的场景,遇到了什么问题,最终解决了这个问题,并在解决这个问题的过程中带出了广告的产品,这里比较关键的是开头的引入要吸引人,使用吸引用户的元素,或者是给用户代入感的典型场景,开头很重要

    (二)常用的爆款套路

    • 在对比的表现上,有一个小技巧,就是突出“最小单元”,仅展示想要对比的、有差异的部分,对比效果就会比较突出

    • 在各个行业里,对比都是一种非常好用的表现方式,既可对比“使用某一个产品前后的效果”,也可以对比“两个人做同一件事情的结果”,这些都能给人很直观的刺激,推荐使用

    • 具有游戏化功能的产品其实都可以用“测一测”这种广告形式,大家对于不确定性总是带着好奇,如果是跟自己有关的不确定性,就更好奇了

    • “测一测”是一个经久不衰的爆款套路

    • 如果产品没有适合让用户“测一测”的点,可以使用“更轻”的互动方式,其核心思想也是给用户一个互动的选项

    • 还有一个常用的形式:街边采访,在做街边采访视频时,要尽量真实自然

    七、数据分析

    • 数据监测是数据分析的基础,监测数据的公司都会有一个看数据的后台,供相关投放人员看

    • 在广告主后台里,能够看到详细的前后端数据,媒体后台也可以看数据

    • 广告主会把转化数据返给媒体,所以在媒体后台也能看到一部分后端数据

    • 一般会在媒体后台和广告主后台这两个地方看数据:从媒体后台看前端数据和广告主返回给媒体的转化数据,从广告主后台看详细的后端数据

    • 通常,广告主希望后端数据(例如 ROI 和利润等)是保密的,不会告诉媒体,也不会告诉代理商

    • 代理商的优化师一般只看媒体后台的数据和广告主告诉的后端数据就足够了;广告主可能会以微信、QQ 等形式直接把后台数据发给优化师,也可能会给优化师开通一个经过权限设置的后端账户

    • 广告主自己的优化师,就可以直接看到媒体后台和广告主后台的数据

    • 各广告主对后端数据的定义不同,有激活、注册、下单、付费、次留等

    • 在广告投放的过程中,用户的所有行为数据都会被记录下来,用户行为的漏斗,用来表示从用户看见广告到点击再到进一步转化的过程,在这个过程中,用户行为逐渐加深、人数逐渐减少

    • “转化率”一般指发生在“两个相邻步骤”之间的转化,以后面一个步骤的名字命名

    • 消费除以某步骤的行为数就是该步骤的成本

    • 投放广告需要花钱,成本会反映每一个转化步骤的单价是否合理

    (一)广告分析的指标

    • 「CPM(每千次展示成本)」:一般反映某媒体的流量贵不贵。竞争越激烈,CPM 就越高,常见的 CPM 在 10 元至 20元,抖音的 CPM相对高一些,一般要 20 元以上;微信朋友圈的 CPM 更高,一般要 30 元以上

    • 「CTR(点击率)」:反映素材对用户的吸引力,CTR 高,说明素材对用户的吸引力强,反之说明用户对素材不感兴趣,一般信息流广告的 CTR 普遍为 2% 左右,抖音的 CTR 普遍不足 1%,抖音视频默认是自动播放的,用户不需要点击就能看到内容,所以点击率会低一些

    • 「CPC(平均点击单价)」:也算是反映媒体流量贵不贵的间接指标,跟点击率有很大关系。通常点击率高,CPC 就低,普遍来看,一般 CPC 在 0.2 元到 1 元。抖音点击率很低,CPC 一般要几元钱

    • 「转化数」:它反映的是广告对广告主的价值

    • 「转化成本」:跟转化目标有很大关系,如果转化目标比较“后端”,下单成本基本都在100 元以上,甚至超过 1000 元

    • 「消耗」:可以用转化数乘以转化成本倒推出来,普遍来看,一天消耗过万就算是还不错的账户,消耗没有上限,一个账户一天消耗几百万元也是存在的

    • 转化相当于“成交量”

    • 广告投放一般需要关注 3 个核心数据:消耗、转化数和转化成本

      (1)消耗指花了多少钱

      (2)转化数指带来了多少效果

      (3)转化成本指价格合不合理、广告投得亏不亏

    • CPM 高不高、CPC 高不高也没那么重要,甚至可以不用关注;每天能带来 5000 多个转化,是一个投放比较成功的账户了

    • 在投广告的时候,如果投的量很少,成本一般比较低;想要获得更多转化,成本相应就会上升,因为需要和其他广告主去竞争展示广告

    • 成本再低,用户量少也没有意义

    • 在投放广告的时候,对成本的要求不是越低越好,要综合考虑成本和量级;在能拿到一定量的情况下才会进一步考虑降低成本

    (二)数据分析的基本思路

    • “从大到小”是指“先看账户整体,再分别看组、计划、创意,操作主要是在计划层级

    • 先看账户整体成本和量是多少,看一个总数;从总数来判断账户的整体情况,先做到心里有数,再去看细分

    • “从多到少”:先看花钱多的,它们对账户成本的影响大;把整个账户的数据按消耗降序排列,以 KPI 为“尺子”,对着找成本明显高、明显低的,这些是我们需要重点关注的计划

    • 单看一天的数据得不出结论,因为数据波动是正常的,所以得“从一天到几天”,也就是从一天的数据再往前翻,看近几天的数据,了解该计划的“底细”

    (三)信息流广告的规律

    • 主要关注计划层级的规律,在这些规律中,最重要的一条就是数据和投放时间的关系

    • 幼年期一般指一条计划刚开始投放的 1~4 天(即转化出价时提到的学习期),处于“撒大网”阶段,所以成本一般会高一些

    • 幼年期就是“累积数据建模型”的阶段,成本比较高,消费能力也比较差,这是广告主必须接受的现象

    • 这个阶段有的媒体有赔付

    • 有的计划无法按照预期成长,没量(指不花钱或转化数很少,“量”一般指转化量)或者成本很高,很快就“夭折”了,最终也不知道什么样的用户会在你的广告上转化;有的计划在投放一段时间之后成功积累一定“转化数”(一般为 20 个,最少也要有 5个),于是进入“壮年期”

    • 壮年期是一条计划最好的阶段,计划的成本相对稳定,而且消费能力最强;如果使用转化出价,那么转化成本每天上下波动不超过 10% 可以看作稳定

    • 不同计划的消费能力可能会相差很大

    • 优化师最关注的就是成本,如果一条计划成本变高了,并且是连续几天都比较高,那么优化师就会关停它;如果计划的成本比较低,只是转化量比较少,还可以先投着

    • 记得关注成本和转化量就行了,成本 OK 就继续投;成本过高就要调整

    • 一个账户的少部分计划(20% 的计划)贡献大部分消耗(80% 的消耗)的现象,甚至一些时候 5% 的计划贡献 80% 的消耗,头部效应很明显

    • 「大部分计划是测试失败的,这是普遍现象」

    • 广告投放的两个典型规律:「一是广告投放效果跟广告计划所处的生命周期有关,按照投放时间,可以分为幼年期、壮年期、老年期;二是广告账户里也有二八定律,账户中各计划的消耗不是平均分配,而是小部分的计划占据大部分的消耗」

    (四)信息流广告数据的特点

    • 信息流广告数据最大的特点就是实时变化,转化成本和消耗都在变化,所以得一直看着

    • 广告数据实时变化,那么就要经常查看账户数据,一直盯着;只要广告在投放,优化师就要为投放效果负责

    • 账户消耗很快的时候,一个小时左右看一次,甚至可能半个小时就要看一下;普通投放的账户,一天看 3~5 次;账户完全没问题的时候,一天至少也要看一次

    • 优化师的第一课:每天都要看账户,即使不做任何操作,也得看一下;否则一旦成本超过了要求,而没有及时停止投放,花了很多钱,那麻烦就大了

    • 信息流广告数据的另一个特点是“数据量很少的时候,得出的结论是不可信的”,因为数据少和数据多的时候,成本可能相差非常大

    • 只有数据达到一定量了,才能得出结论

      (1)点击数在 100 个以上

      (2)曝光量在 2000 次以上

      (3)消耗在 50 元以上

    (五)账户调整”三板斧“

    • 出价、预算、开关三者合起来就是优化师在竞价里最常用的“三板斧”

    • 在投放广告的时候,大家最关注的是成本和转化量,广告投放常见的问题也是成本高、转化量不够

    • 出价是决定成本最直接的因素,尤其是转化出价

    • 出价还会影响到广告的竞争力,也就是 eCPM,eCPM 会直接影响到广告的量级(消耗),可以通过调整出价来影响广告的量级

      (1)如果成本高,但是量级还可以,那就降价

      (2)如果成本还可以,但是量级比较小,那可以加价(也叫提升出价,简称提价)

    • 出价和量级是紧密联系在一起的,提价肯定对账户提升量级有正向作用;降价需要谨慎一点

    • 首先要记住的是“稳定出价”,也就是出价不变

    • 稳定出价是最省心也最好用的方式,如果实在有问题,再做调整;调整的时候幅度不要太大,一般在 10%以下,也有的媒体会说要低于 5%。一天也不要调的次数太多,一天 2 次以上就算多了

    • 预算设置的核心思路是“成本低的多花钱,成本高的少花钱”

    • 花钱以前要设置一个初始预算,开始花钱之后也用预算来控制花钱的节奏

    • “从大到小”:通常,广告主会给到一个总的预算,优化师根据账户里各条计划的表现把预算金额分到各计划里

    • 具体哪条计划来花、花多少钱,通常是由该计划的数据决定的,预算是“从大到小”分配的

    • “从少到多”:广告投放最常见的思路是“先少花点儿钱试试看,如果效果好,再逐渐提升预算”

    • 一条计划刚开始的预算设置成 300 元、500 元或者 1000 元都比较常见,具体要看账户的日消耗

    • 预算的提升幅度可以参考 500 元→2000 元→5000 元→10 000 元→50 000 元,逐步放开;对于新计划,预算是“从少到多”增加的

    • 当计划实际有了数据之后,就可以根据数据情况调整预算了;如果成本低,可以加预算;如果成本高,就要降预算,甚至不让它再花钱

    • 看成本,不只会看转化成本,也要看后端成本

    • 对预算的调整也不能只看媒体后台的转化成本,要以广告主最终考核的成本为准

    • 预算和余额是紧紧联系在一起的;如果账户余额为 0,那么无论你设置多少预算都是没意义的,系统都不会让你花钱;一定要每天查看余额,及时充值,避免因为账户没钱了耽误广告主投放

    • 预算真的是重中之重

    • 开关这是广告投放的终极操作,是决定计划成败的操作;一般谈到关计划,就是指已经无法通过调整出价和预算解决问题了,需要彻底放弃

    • “开”可以理解成新建一条计划,也可以理解成再观察一段时间,不操作,等待系统来优化;“关”就是关停,不投了

    • 数据量非常小的时候,不要轻易关掉,建议点击数在 100个以上,或者曝光量在 2000 次以上,或者消耗在 50 元以上再做判断

    • 超过了上面说的数据量后,看媒体有没有赔付,如果有赔付,就不用关了;如果没有赔付,但计划仍处在学习期的时候,如果成本没有高得很离谱(离谱可以参考 KPI 的 2倍),也可以忍一忍,系统学会了之后就会降下来

    • 过了学习期,计划成本出现波动是正常的,可以以 1 天为时限,如果第二天成本就又好了,就可以不用关;如果一直(连续 2~3 天)很差就可以考虑关掉

    • “2 关 3 不关”

      (1)2 关:成本高的离谱要关;成本连续 2~3 天很高,要关

      (2)3 不关:数据量非常小的时候不关;满足媒体赔付条件不关;短期成本有波动不关

    • 一般可以通过转化数和投放时间来判断计划是否处于学习期,学习期可以指投放的前3天且转化数小于20的时间段,这个时期成本不太稳定;如果过了3天,转化数仍小于20,那么大概率就学习失败了;仍处于前3天但是转化数超过了20,也可以认为不在学习期,要求它的成本

    • 不能保证新建的计划一定比旧计划好,新开启一条计划也需要学习期,所以关掉一条计划虽然就是“点一下”的事,但还是要谨慎操作

    • 组合应用

      (1)成本低、量级大——提预算

      (2)计划花钱少——提出价

      (3)成本高——降价

      (4)成本一直高——关停

      (5)一直不花钱——关停

    • 「多花钱」:提预算、提出价、开计划(新建计划、对已有计划再观察一段时间)

    • 「少花钱」:降预算、降出价、关计划

    • 关计划是杀伤力最强的操作,关之前确认几种情况:数据量很少的时候不要关;计划满足赔付条件的时候不要关;偶尔波动不用关

    • 关计划的情况:高得离谱(参考 KPI 的 2 倍)或者一直很差(参考时间连续 2~3 天)

    • 现成本高了可以先控制预算或降价,可能第二天成本自己会降下来

    • 广告投放:设置好了定向和创意,然后开始投放;投放的时候实时盯着数据,主要是盯成本和消耗,如果觉得量少了,就让它多花点钱(提预算、提出价、开计划);如果成本高了,就让它少花点钱(降预算、降出价、关计划),调整的核心思路是“成本高的少花钱,成本低的多花钱”

    八、 推荐资料和工具

    (一)资料

    • 大卫 • 奥格威的《一个广告人的自白》

    • 东东枪的《文案的基本修养》

    (二)广告学习的平台

    • 素材:App Growing

    「https://appgrowing.cn/」

    (三)查看数据的平台

    • 二郎查

    「https://www.erlangcha.com/」

    九、本文资料来源

    「《信息流广告入门》」

    「宁阿姨」

    更多相关内容
  • 行业分类-电子-一种用于电梯脚踏板位置上的广告贴层
  • 广告的数据是存放在changgou- ...里面有两张表,一张是tb_content_catrgory(广告分类表),根据页面的不同位置,广告有不同的分类,比如首页轮播,猜你喜欢等;另一张是tb_content(广告表),这张表里存放了广告的数据
  • 分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,...

    欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。

    前一篇文章讲述了聚类算法的原理知识级案例,包括K-Means聚类、BIRCH算法、PCA降维聚类、均值漂移聚类、文本聚类等。。本文将详细讲解分类算法的原理知识级案例,包括决策树、KNN、SVM,并通过详细的分类对比实验和可视化边界分析与大家总结。四万字基础文章,希望对您有所帮助。

    下载地址:

    前文赏析:

    第一部分 基础语法

    第二部分 网络爬虫

    第三部分 数据分析和机器学习

    作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。


    分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,再用该目标函数预测新数据集的未知属性。本章主要讲述分类算法基础概念,并结合决策树、KNN、SVM分类算法案例分析各类数据集,从而让读者学会使用Python分类算法分析自己的数据集,研究自己领域的知识,从而创造价值。

    一.分类

    1.分类模型

    与前面讲述的聚类模型类似,分类算法的模型如图1所示。它主要包括两个步骤:

    • 训练。给定一个数据集,每个样本包含一组特征和一个类别信息,然后调用分类算法训练分类模型。
    • 预测。利用生成的模型或函数对新的数据集(测试集)进行分类预测,并判断其分类后的结果,并进行可视化绘图显示。

    在这里插入图片描述

    通常为了检验学习模型的性能,会使用校验集。数据集会被分成不相交的训练集和测试集,训练集用来构造分类模型,测试集用来检验多少类标签被正确分类。

    下面举一个分类实例进行讲解。假设存在一个垃圾分类系统,将邮件划分为“垃圾邮件”和“非垃圾邮件”,现在有一个带有是否是垃圾邮件类标的训练集,然后训练一个分类模型,对测试集进行预测,步骤如下:

    • (1) 分类模型对训练集进行训练,判断每行数据是正向数据还是负向数据,并不断与真实的结果进行比较,反复训练模型,直到模型达到某个状态或超出某个阈值,模型训练结束。
    • (2) 利用该模型对测试集进行预测,判断其类标是“垃圾邮件”还是“非垃圾邮件”,并计算出该分类模型的准确率、召回率和F特征值。

    经过上述步骤,当收到一封新邮件时,我们可以根据它邮件的内容或特征,判断其是否是垃圾邮件,这为我们提供了很大的便利,能够防止垃圾邮件信息的骚扰。


    2.常见分类算法

    监督式学习包括分类和回归。其中常见的分类算法包括朴素贝叶斯分类器、决策树、K最近邻分类算法、支持向量机、神经网络和基于规则的分类算法等,同时还有用于组合单一类方法的集成学习算法,如Bagging和Boosting等。

    (1) 朴素贝叶斯分类器
    朴素贝叶斯分类器(Naive Bayes Classifier,简称NBC)发源于古典数学理论,有着坚实的数学基础和稳定的分类效率。该算法是利用Bayes定理来预测一个未知类别的样本属于各个类别的可能性,选择其中可能性最大的一个类别作为该样本的最终类别。其中,朴素贝叶斯(Naive Bayes)法是基于贝叶斯定理与特征条件独立假设的方法 ,是一类利用概率统计知识进行分类的算法,该算法被广泛应用的模型称为朴素贝叶斯模型(Naive Bayesian Model,简称NBM)。

    根据贝叶斯定理,对于一个分类问题,给定样本特征x,样本属于类别y的概率如下:

    在这里插入图片描述

    其中p(x)表示x事件发生的概率,p(y)表示y事件发生的概率,p(x|y)表示事件y发生后事件x发生的概率。由于贝叶斯定理的成立本身需要一个很强的条件独立性假设前提,而此假设在实际情况中经常是不成立的,因而其分类准确性就会下降,同时它对缺失的数据不太敏感。本书没有详细介绍朴素贝叶斯分类实例,希望读者下来自行研究学习。

    (2) 决策树算法
    决策树(Decision Tree)是以实例为基础的归纳学习(Inductive Learning)算法,它是对一组无次序、无规则的实例建立一棵决策判断树,并推理出树形结果的分类规则。决策树作为分类和预测的主要技术之一,其构造目的是找出属性和类别间的关系,用它来预测未知数据的类别。该算法采用自顶向下的递归方式,在决策树的内部节点进行属性比较,并根据不同属性值判断从该节点向下的分支,在决策树的叶子节点得到反馈的结果。

    决策树算法根据数据的属性采用树状结构建立决策模型,常用来解决分类和回归问题。常见的算法包括:分类及回归树、ID3 、C4.5、随机森林等。

    (3) K最近邻分类算法
    K最近邻(K-Nearest Neighbor,简称KNN)分类算法是一种基于实例的分类方法,是数据挖掘分类技术中最简单常用的方法之一。所谓K最近邻,就是寻找K个最近的邻居,每个样本都可以用它最接近的K个邻居来代表。该方法需要找出与未知样本X距离最近的K个训练样本,看这K个样本中属于哪一类的数量多,就把未知样本X归为那一类。

    K-近邻方法是一种懒惰学习方法,它存放样本,直到需要分类时才进行分类,如果样本集比较复杂,可能会导致很大的计算开销,因此无法应用到实时性很强的场合。

    (4) 支持向量机
    支持向量机(Support Vector Machine,简称SVM)是数学家Vapnik等人根据统计学习理论提出的一种新的学习方法,其基本模型定义为特征空间上间隔最大的线性分类器,其学习策略是间隔最大化,最终转换为一个凸二次规划问题的求解。

    SVM算法的最大特点是根据结构风险最小化准则,以最大化分类间隔构造最优分类超平面来提高学习机的泛化能力,较好地解决了非线性、高维数、局部极小点等问题,同时维数大于样本数时仍然有效,支持不同的内核函数(线性、多项式、s型等)。

    (5) 神经网络
    神经网络(Neural Network,也称之为人工神经网络)算法是80年代机器学习界非常流行的算法,不过在90年代中途衰落。现在又随着“深度学习”之势重新火热,成为最强大的机器学习算法之一。图2是一个神经网络的例子,包括输入层、隐藏层和输出层。

    在这里插入图片描述

    人工神经网络(Artificial Neural Network,简称ANN)是一种模仿生物神经网络的结构和功能的数学模型或计算模型。在这种模型中,大量的节点或称“神经元”之间相互联接构成网络,即“神经网络”,以达到处理信息的目的。神经网络通常需要进行训练,训练的过程就是网络进行学习的过程,训练改变了网络节点的连接权的值使其具有分类的功能,经过训练的网络就可用于对象的识别。

    常见的人工神经网络有BP(Back Propagation)神经网络、径向基RBF神经网络、Hopfield神经网络、随机神经网络(Boltzmann机)、深度神经网络DNN、卷积神经网络CNN等。

    (6) 集成学习
    集成学习(Ensemble Learning)是一种机器学习方法,它使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果。由于实际应用的复杂性和数据的多样性往往使得单一的分类方法不够有效,因此,学者们对多种分类方法的融合即集成学习进行了广泛的研究,它已俨然成为了国际机器学习界的研究热点。

    集成学习试图通过连续调用单个的学习算法,获得不同的基学习器,然后根据规则组合这些学习器来解决同一个问题,可以显著的提高学习系统的泛化能力。组合多个基学习器主要采用投票(加权)的方法,常见的算法有装袋(Bagging)、推进(Boosting)等。


    3.回归、聚类和分类的区别

    在第12篇文章中我们详细讲解了回归分析,13篇详细讲解了聚类分析,本章着重讲解分类分析,而它们之间究竟存在什么区别和关系呢?

    • 分类(Classification)和回归(Regression)都属于监督学习,它们的区别在于:回归是用来预测连续的实数值,比如给定了房屋面积,来预测房屋价格,返回的结果是房屋价格;而分类是用来预测有限的离散值,比如判断一个人是否患糖尿病,返回值是“是”或“否”。即明确对象属于哪个预定义的目标类,预定义的目标类是离散时为分类,连续时为回归。
    • 分类属于监督学习,而聚类属于无监督学习,其主要区别是:训练过程中是否知道结果或是否存在类标。比如让小孩给水果分类,给他苹果时告诉他这是苹果,给他桃子时告诉他这是桃子,经过反复训练学习,现在给他一个新的水果,问他“这是什么?”,小孩对其进行回答判断,整个过程就是一个分类学习的过程,在训练小孩的过程中反复告诉他对应水果真实的类别。而如果采用聚类算法对其进行分析,则是给小孩一堆水果,包括苹果、橘子、桃子,小孩开始不知道需要分类的水果是什么,让小孩自己对水果进行分类,按照水果自身的特征进行归纳和判断,小孩分成三堆后,再给小孩新的水果,比如是苹果,小孩把它放到苹果堆的整个过程称之为聚类学习过程。

    总之,分类学习在训练过程中是知道对应的类标结果的,即训练集是存在对应的类标的;而聚类学习在训练过程中不知道数据对应的结果,根据数据集的特征特点,按照“物以类聚”的方法,将具有相似属性的数据聚集在一起。


    4.性能评估

    分类算法有很多,不同的分类算法又有很多不同的变种,不同的分类算法有不同的特点,在不同的数据集上表现的效果也不同,我们需要根据特定的任务来选择对应的算法。选择好了分类算法之后,我们如何评价一个分类算法的好坏呢?

    本书主要采用精确率(Precision)、召回率(Recall)和F值(F-measure或F-score)来评价分类算法。

    (1) 精确率(Precision)和召回率(Recall)
    精确率定义为检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率定义为检索出的相关文档数和文档库中所有相关文档数的比率,衡量的是检索系统的查全率。公式如下:

    在这里插入图片描述

    在这里插入图片描述

    其中,参数N表示实验结果中正确识别出的聚类类簇数,S表示实验结果中实际识别出的聚类类簇数,T表示数据集中所有真实存在的聚类相关类簇数。

    (2) F值(F-measure或F-score)
    精确率和召回率两个评估指标在特定的情况下是相互制约的,因而很难使用单一的评价指标来衡量实验的效果。F-值是准确率和召回率的调和平均值,它可作为衡量实验结果的最终评价指标,F值更接近两个数中较小的那个。F值指的计算公式如下公式所示:

    在这里插入图片描述

    (3) 其他指标
    其他常用的分类算法的评价指标包括:

    • 准确率(Accuracy)
    • 错误率(Error Rate)
    • 灵敏度(Sensitive)
    • 特效度(Specificity)
    • ROC曲线

    二.决策树

    1.算法实例描述

    下面通过一个招聘的案例讲述决策树的基本原理及过程。假设一位程序员与面试官的初次面试的简单对话,我们利用决策树分类的思想来构建一棵树形结构。对话如下:

    面试官:多大年纪了?
    程序员:25岁。
    面试官:本科是不是已经毕业呢?
    程序员:是的。
    面试官:编程技术厉不厉害?
    程序员:不算太厉害,中等水平。
    面试官:熟悉Python语言吗?
    程序员:熟悉的,做过数据挖掘相关应用。
    面试官:可以的,你通过了。
    

    这个面试的决策过程就是典型的分类树决策。相当于通过年龄、学历、编程技术和是否熟悉Python语言将程序员初试分为两个类别:通过和不通过。假设这个面试官对程序员的要求是30岁以下、学历本科以上并且是编程厉害或熟悉Pyhon语言中等以上编程技术的程序员,这个面试官的决策逻辑过程用图3表示。

    在这里插入图片描述

    第二个实例是典型的决策树判断苹果的例子,假设存在4个样本,2个属性判断是否是好苹果,其中第二列1表示苹果很红,0表示苹果不红;第三列1表示苹果很大,0表示苹果很小;第4列结果1表示苹果好吃,0表示苹果不好吃。

    在这里插入图片描述

    样本中有2个属性,即苹果红色属性和苹果大小属性。这里红苹果用A0表示,大苹果用A1表示,构建的决策树如图19.4所示。图中最顶端有四个苹果(1、2、3、4),然后它将颜色红的苹果放在一边(A0=红),颜色不红的苹果放在另一边,其结果为1、2是红苹果,3、4是不红的苹果;再根据苹果的大小进行划分,将大的苹果判断为好吃的(A1=大),最终输出结果在图中第三层显示,其中1和3是好吃的苹果,2和4是不好吃的苹果,该实例表明苹果越大越好吃。

    在这里插入图片描述

    决策树算法根据数据的属性并采用树状结构构建决策模型,常用来解决分类和回归问题。常见的决策树算法包括:

    • 分类及回归树(Classification And Regression Tree,简称CART)
    • ID3算法(Iterative Dichotomiser 3)
    • C4.5算法
    • 随机森林算法(Random Forest)
    • 梯度推进机算法(Gradient Boosting Machine,简称GBM)

    决策树构建的基本步骤包括4步,具体步骤如下:

    • 第一步:开始时将所有记录看作一个节点。
    • 第二步:遍历每个变量的每一种分割方式,找到最好的分割点。
    • 第三步:分割成两个节点N1和N2。
    • 第四步:对N1和N2分别继续执行第二步和第三步,直到每个节点足够“纯”为止。

    决策数具有两个优点:

    • 模型可以读性好,描述性强,有助于人工分析。
    • 效率高,决策树只需要一次构建,可以被反复使用,每一次预测的最大计算次数不超过决策树的深度。

    2.DTC算法

    Sklearn机器学习包中,实现决策树(DecisionTreeClassifier,简称DTC)的类是:

    • sklearn.tree.DecisionTreeClassifier

    它能够解决数据集的多类分类问题,输入参数为两个数组X[n_samples,n_features]和y[n_samples],X为训练数据,y为训练数据标记值。DecisionTreeClassifier构造方法为:

    sklearn.tree.DecisionTreeClassifier(criterion='gini'  
                          , splitter='best'  
                          , max_depth=None  
                          , min_samples_split=2  
                          , min_samples_leaf=1  
                          , max_features=None  
                          , random_state=None  
                          , min_density=None  
                          , compute_importances=None  
                          , max_leaf_nodes=None) 
    

    DecisionTreeClassifier类主要包括两个方法:

    • clf.fit(train_data, train_target)
      用来装载(train_data,train_target)训练数据,并训练分类模型。
    • pre = clf.predict(test_data)
      用训练得到的决策树模型对test_data测试集进行预测分析。

    3.决策树分析鸢尾花

    前面第12篇文章介绍过逻辑回归分析鸢尾花的实例,这里再次讲解决策树分析鸢尾花实例,从而加深读者印象。

    (1) 数据集回顾
    在Sklearn机器学习包中,集成了各种各样的数据集,包括糖尿病数据集、鸢尾花数据集、新闻数据集等。这里使用的是鸢尾花卉Iris数据集,它是一个很常用的数据集,共150行数据,包括四个特征变量:

    • 萼片长度
    • 萼片宽度
    • 花瓣长度
    • 花瓣宽度。

    同时包括一个类别变量,将鸢尾花划分为三个类别,即:

    • 山鸢尾(Iris-setosa)
    • 变色鸢尾(Iris-versicolor)
    • 维吉尼亚鸢尾(Iris-virginica)

    表2为鸢尾花数据集,详细信息如下表所示。

    在这里插入图片描述

    iris是鸢尾植物,这里存储了其萼片和花瓣的长宽,共4个属性,鸢尾植物分三类。 iris数据集中包括两个属性iris.data和iris.target。其中,data数据是一个矩阵,每一列代表了萼片或花瓣的长宽,一共4列,每一行数据代表某个被测量的鸢尾植物,一共采样了150条记录。载入鸢尾花数据集代码如下所示:

    from sklearn.datasets import load_iris 
    iris = load_iris()
    print(iris.data)
    print(iris.target)
    

    在这里插入图片描述


    (2) 决策树简单分析鸢尾花
    下述代码实现了调用Sklearn机器学习包中DecisionTreeClassifier决策树算法进行分类分析,并绘制预测的散点图。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-06
    
    #导入数据集iris
    from sklearn.datasets import load_iris 
    iris = load_iris()
    print(iris.data)           #输出数据集
    print(iris.target)         #输出真实标签
    print(len(iris.target))
    print(iris.data.shape)     #150个样本 每个样本4个特征
    
    #导入决策树DTC包
    from sklearn.tree import DecisionTreeClassifier
    clf = DecisionTreeClassifier()
    clf.fit(iris.data, iris.target)        #训练
    print(clf)
    predicted = clf.predict(iris.data)     #预测
    
    #获取花卉两列数据集
    X = iris.data
    L1 = [x[0] for x in X]
    L2 = [x[1] for x in X]
    
    #绘图
    import numpy as np
    import matplotlib.pyplot as plt
    plt.scatter(L1, L2, c=predicted, marker='x')  #cmap=plt.cm.Paired
    plt.title("DTC")
    plt.show()
    

    输出结果如图5所示,可以看到决策树算法将数据集预测为三类,分别代表着数据集对应的三种鸢尾花,但数据集中存在小部分交叉结果。预测的结果如下:

    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
     2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
     2 2]
    150
    (150, 4)
    
    DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
                           max_features=None, max_leaf_nodes=None,
                           min_impurity_decrease=0.0, min_impurity_split=None,
                           min_samples_leaf=1, min_samples_split=2,
                           min_weight_fraction_leaf=0.0, presort=False,
                           random_state=None, splitter='best')
    

    在这里插入图片描述

    下面对上述核心代码进行简单描述。

    • from sklearn.datasets import load_iris
    • iris = load_iris()

    该部分代码是导入sklearn机器学习包自带的鸢尾花数据集,调用load_iris()函数导入数据,数据共分为数据(data)和类标(target)两部分。

    • from sklearn.tree import DecisionTreeClassifier
    • clf = DecisionTreeClassifier()
    • clf.fit(iris.data, iris.target)
    • predicted = clf.predict(iris.data)

    该部分代码导入决策树模型,并调用fit()函数进行训练,predict()函数进行预测。

    • import matplotlib.pyplot as plt
    • plt.scatter(L1, L2, c=predicted, marker=‘x’)

    该部分代码是导入matplotlib绘图扩展包,调用scatter()函数绘制散点图。

    但上面的代码中存在两个问题:

    • 代码中通过“L1 = [x[0] for x in X]”获取了第一列和第二列数据集进行了分类分析和绘图,而真实的iris数据集中包括四个特征,那怎么绘制四个特征的图形呢? 这就需要利用PCA降维技术处理,参考前一篇文章。
    • 第二个问题是在聚类、回归、分类模型中,都需要先进行训练,再对新的数据集进行预测,这里却是对整个数据集进行分类分析,而真实情况是需要把数据集划分为训练集和测试集的,例如数据集的70%用于训练、30%用于预测,或80%用于训练、20%用于预测。

    4.数据集划分及分类评估

    这部分内容主要是进行代码优化,将数据集划分为80%训练集-20%预测集,并对决策树分类算法进行评估。由于提供的数据集类标是存在一定规律的,前50个类标为0(山鸢尾)、中间50个类标为1(变色鸢尾)、最后50个类标为2(维吉尼亚鸢)。即:

    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
     2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
     2 2]
    

    这里调用NumPy库中的 concatenate() 函数对数据集进行挑选集成,选择第0-40行、第50-90行、第100-140行数据作为训练集,对应的类标作为训练样本类标;再选择第40-50行、第90-100行、第140-150行数据作为测试集合,对应的样本类标作为预测类标。

    代码如下,“axis=0”表示选取数值的等差间隔为0,即紧挨着获取数值。

    #训练集
    train_data = np.concatenate((iris.data[0:40, :], iris.data[50:90, :], iris.data[100:140, :]), axis = 0)
    #训练集样本类别
    train_target = np.concatenate((iris.target[0:40], iris.target[50:90], iris.target[100:140]), axis = 0)
    #测试集
    test_data = np.concatenate((iris.data[40:50, :], iris.data[90:100, :], iris.data[140:150, :]), axis = 0)
    #测试集样本类别
    test_target = np.concatenate((iris.target[40:50], iris.target[90:100], iris.target[140:150]), axis = 0)
    

    同时,调用sklearn机器学习包中metrics类对决策树分类算法进行评估,它将输出准确率(Precison)、召回率(Recall)、F特征值(F-score)、支持度(Support)等。

    #输出准确率 召回率 F值  
    from sklearn import metrics  
    print(metrics.classification_report(test_target, predict_target))  
    print(metrics.confusion_matrix(test_target, predict_target)) 
    

    分类报告的核心函数为:

    sklearn.metrics.classification_report(y_true, 
                                  y_pred, 
                                  labels=None,
                                  target_names=None,
                                  sample_weight=None, 
                                  digits=2)
    

    其中y_true参数表示正确的分类类标,y_pred表示分类预测的类标,labels表示分类报告中显示的类标签的索引列表,target_names参数显示与labels对应的名称,digits是指定输出格式的精确度。评价公式如下:

    在这里插入图片描述

    调用 metrics.classification_report() 方法对决策树算法进行评估后,会在最后一行将对所有指标进行加权平均值,详见下面完整代码。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-06
    from sklearn.datasets import load_iris
    from sklearn.tree import DecisionTreeClassifier
    from sklearn import metrics
    import numpy as np
    import matplotlib.pyplot as plt
    
    #导入数据集iris
    '''
    重点:分割数据集 构造训练集/测试集,80/20
         70%训练  0-40  50-90  100-140
         30%预测  40-50 90-100 140-150
    '''
    iris = load_iris()
    train_data = np.concatenate((iris.data[0:40, :], iris.data[50:90, :], iris.data[100:140, :]), axis = 0)  #训练集
    train_target = np.concatenate((iris.target[0:40], iris.target[50:90], iris.target[100:140]), axis = 0)  #训练集样本类别
    test_data = np.concatenate((iris.data[40:50, :], iris.data[90:100, :], iris.data[140:150, :]), axis = 0)  #测试集
    test_target = np.concatenate((iris.target[40:50], iris.target[90:100], iris.target[140:150]), axis = 0)  #测试集样本类别
    
    #导入决策树DTC包
    clf = DecisionTreeClassifier()
    clf.fit(train_data, train_target)        #注意均使用训练数据集和样本类标
    print(clf)
    predict_target = clf.predict(test_data)  #测试集
    print(predict_target)
    
    #预测结果与真实结果比对
    print(sum(predict_target == test_target))
    
    #输出准确率 召回率 F值
    print(metrics.classification_report(test_target, predict_target))
    print(metrics.confusion_matrix(test_target, predict_target))
    
    #获取花卉测试数据集两列数据
    X = test_data
    L1 = [n[0] for n in X]
    L2 = [n[1] for n in X]
    
    #绘图
    plt.scatter(L1, L2, c=predict_target, marker='x')  #cmap=plt.cm.Paired
    plt.title("DecisionTreeClassifier")
    plt.show()
    

    输出结果如下,包括对数据集40-50、90-100、140-150的预测结果,接下来输出的“30”表示整个30组类标预测结果和真实结果是一致的,最后输出评估结果。

    [0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2]
    30
                 precision    recall  f1-score   support
              0       1.00      1.00      1.00        10
              1       1.00      1.00      1.00        10
              2       1.00      1.00      1.00        10
    
    avg / total       1.00      1.00      1.00        30
    
    [[10  0  0]
     [ 0 10  0]
     [ 0  0 10]]
    

    同时输出图形如图6所示。

    在这里插入图片描述

    读者可以自行深入研究,调用sklearn.tree.export_graphviz类实现导出决策树绘制树形结构的过程,比如鸢尾花数据集输出如图7所示的树形结构。

    在这里插入图片描述


    5.区域划分对比

    下面讲述区域划分对比实验(前面已经出现过),它是指按照数据集真实的类标,将其划分为不同颜色区域,这里的鸢尾花数据集共分为三个区域,最后进行散点图绘制对比。每个区域对应一类散点,表示预测结果和真实结果一致,如果某个区域混入其他类型的散点,则表示该点的预测结果与真实结果不一致。

    完整代码如下所示,代码首先调用“iris.data[:, :2]”代码获取其中两列数据(两个特征),再进行决策树分类分析。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-06
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.datasets import load_iris   
    from sklearn.tree import DecisionTreeClassifier 
    
    #载入鸢尾花数据集
    iris = load_iris()         
    X = X = iris.data[:, :2]   #获取花卉前两列数据
    Y = iris.target           
    lr = DecisionTreeClassifier()  
    lr.fit(X,Y)
    
    #meshgrid函数生成两个网格矩阵
    h = .02
    x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    
    #pcolormesh函数将xx,yy两个网格矩阵和对应的预测结果Z绘制在图片上
    Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    plt.figure(1, figsize=(8,6))
    plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)
    
    #绘制散点图
    plt.scatter(X[:50,0], X[:50,1], color='red',marker='o', label='setosa')
    plt.scatter(X[50:100,0], X[50:100,1], color='blue', marker='x', label='versicolor')
    plt.scatter(X[100:,0], X[100:,1], color='green', marker='s', label='Virginica') 
    plt.xlabel('Sepal length')
    plt.ylabel('Sepal width')
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.xticks(())
    plt.yticks(())
    plt.legend(loc=2) 
    plt.show()
    

    下面作者对区域划分对比代码进行详细讲解。

    • x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    • y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    • xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

    获取的鸢尾花两列数据,对应为萼片长度和萼片宽度,每个点的坐标就是(x,y)。先取X二维数组的第一列(长度)的最小值、最大值和步长h(设置为0.02)生成数组,再取X二维数组的第二列(宽度)的最小值、最大值和步长h生成数组,最后用meshgrid()函数生成两个网格矩阵xx和yy,如下所示:

    [[ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
     [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
     ..., 
     [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
     [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]]
    [[ 1.5   1.5   1.5  ...,  1.5   1.5   1.5 ]
     [ 1.52  1.52  1.52 ...,  1.52  1.52  1.52]
     ..., 
     [ 4.88  4.88  4.88 ...,  4.88  4.88  4.88]
     [ 4.9   4.9   4.9  ...,  4.9   4.9   4.9 ]]
    
    • Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])

    调用ravel()函数将xx和yy的两个矩阵转变成一维数组,再进行预测分析。由于两个矩阵大小相等,因此两个一维数组大小也相等。np.c_[xx.ravel(), yy.ravel()]是生成矩阵,即:

    xx.ravel() 
    [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
    yy.ravel() 
    [ 1.5  1.5  1.5 ...,  4.9  4.9  4.9]
    np.c_[xx.ravel(), yy.ravel()]
    [[ 3.8   1.5 ]
     [ 3.82  1.5 ]
     [ 3.84  1.5 ]
     ..., 
     [ 8.36  4.9 ]
     [ 8.38  4.9 ]
     [ 8.4   4.9 ]]
    

    总之,上述操作是把第一列萼片长度数据按h取等分作为行,并复制多行得到xx网格矩阵;再把第二列萼片宽度数据按h取等分,作为列,并复制多列得到yy网格矩阵;最后将xx和yy矩阵都变成两个一维数组,调用np.c_[]函数组合成一个二维数组进行预测。

    调用predict()函数进行预测,预测结果赋值给Z。即:

    Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])
    [1 1 1 ..., 2 2 2]
    size: 39501
    
    • Z = Z.reshape(xx.shape)
      调用reshape()函数修改形状,将其Z转换为两个特征(长度和宽度),则39501个数据转换为171*231的矩阵。Z = Z.reshape(xx.shape)输出如下:
    [[1 1 1 ..., 2 2 2]
     [1 1 1 ..., 2 2 2]
     [0 1 1 ..., 2 2 2]
     ..., 
     [0 0 0 ..., 2 2 2]
     [0 0 0 ..., 2 2 2]
     [0 0 0 ..., 2 2 2]]
    
    • plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)

    调用pcolormesh()函数将xx、yy两个网格矩阵和对应的预测结果Z绘制在图片上,可以发现输出为三个颜色区块,分别表示三类区域。cmap=plt.cm.Paired表示绘图样式选择Paired主题。输出的区域如下图所示:

    在这里插入图片描述

    • plt.scatter(X[:50,0], X[:50,1], color=‘red’,marker=‘o’, label=‘setosa’)

    调用scatter()绘制散点图,第一个参数为第一列数据(长度),第二个参数为第二列数据(宽度),第三、四个参数为设置点的颜色为红色,款式为圆圈,最后标记为setosa。

    在这里插入图片描述

    最终输出如图9所示,经过决策树分析后划分为三个区域,左上角部分为红色的圆点,对应setosa鸢尾花;右边部分为绿色方块,对应virginica鸢尾花;中间靠下部分为蓝色星形,对应versicolor鸢尾花。散点图为各数据点真实的花类型,划分的三个区域为数据点预测的花类型,预测的分类结果与训练数据的真实结果结果基本一致,部分鸢尾花出现交叉。


    三.KNN分类算法

    1.算法实例描述

    KNN分类算法是最近邻算法,字面意思就是寻找最近邻居,由Cover和Hart在1968年提出,它简单直观易于实现。下面通过一个经典例子来讲解如何寻找邻居,选取多少个邻居。图10需要判断右边这个动物是鸭子、鸡还是鹅?这就涉及到了KNN算法的核心思想,判断与这个样本点相似的类别,再预测其所属类别。由于它走路和叫声像一只鸭子,所以右边的动物很可能是一只鸭子。

    在这里插入图片描述

    KNN分类算法的核心思想是从训练样本中寻找所有训练样本X中与测试样本距离(常用欧氏距离)最近的前K个样本(作为相似度),再选择与待分类样本距离最小的K个样本作为X的K个最邻近,并检测这K个样本大部分属于哪一类样本,则认为这个测试样本类别属于这一类样本。

    KNN分类的算法步骤如下:

    • 计算测试样本点到所有样本点的欧式距离dist,采用勾股定理计算
    • 用户自定义设置参数K,并选择离带测点最近的K个点
    • 从这K个点中,统计各个类型或类标的个数
    • 选择出现频率最大的类标号作为未知样本的类标号,反馈最终预测结果

    假设现在需要判断图11中的圆形图案属于三角形还是正方形类别,采用KNN算法分析步骤如下:

    • 当K=3时,图中第一个圈包含了三个图形,其中三角形2个,正方形一个,该圆的则分类结果为三角形。
    • 当K=5时,第二个圈中包含了5个图形,三角形2个,正方形3个,则以3:2的投票结果预测圆为正方形类标。
    • 同理,当K=11原理也是一样,设置不同的K值,可能预测得到结果也不同。所以,KNN是一个非常简单、易于理解实现的分类算法。

    在这里插入图片描述

    最后简单讲述KNN算法的优缺点。KNN分类算法存在的优点包括:

    • 算法思路较为简单,易于实现。
    • 当有新样本要加入训练集中时,无需重新训练,即重新训练的代价低。
    • 计算时间和空间线性于训练集的规模。

    其缺点主要表现为分类速度慢,由于每次新的待分样本都必须与所有训练集一同计算比较相似度,以便取出靠前的K个已分类样本,所以时间复杂度较高。整个算法的时间复杂度可以用O(m*n)表示,其中m是选出的特征项的个数,而n是训练集样本的个数。同时,如果K值确定不好,也会影响整个实验的结果,这也是KNN算法的另一个缺点。


    2.KNeighborsClassifier

    Sklearn机器学习包中,实现KNN分类算法的类是neighbors.KNeighborsClassifier。构造方法如下:

    KNeighborsClassifier(algorithm='ball_tree', 
    	leaf_size=30, 
    	metric='minkowski',
    	metric_params=None, 
    	n_jobs=1, 
    	n_neighbors=3, 
    	p=2, 
    	weights='uniform')
    

    其中最重要的参数是n_neighbors=3,设置最近邻K值。同时,KNeighborsClassifier可以设置3种算法:brute、kd_tree、ball_tree。具体调用方法如下:

    from sklearn.neighbors import KNeighborsClassifier  
    knn = KNeighborsClassifier(n_neighbors=3, algorithm="ball_tree")
    

    KNN算法分析时也包括训练和预测两个方法。

    • 训练knn.fit(data, target)
    • 预测pre = knn.predict(data)

    下面这段代码是简单调用KNN分类算法进行预测的例子,代码如下。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-06
    import numpy as np  
    from sklearn.neighbors import KNeighborsClassifier  
    
    X = np.array([[-1,-1],[-2,-2],[1,2], [1,1],[-3,-4],[3,2]])
    Y = [0,0,1,1,0,1]
    x = [[4,5],[-4,-3],[2,6]]
    knn = KNeighborsClassifier(n_neighbors=3, algorithm="ball_tree")
    knn.fit(X,Y)
    pre = knn.predict(x)
    print(pre)
    

    定义了一个二维数组用于存储6个点,其中x和y坐标为负数的类标定义为0,x和y坐标为正数的类标定义为1。调用knn.fit(X,Y)函数训练模型后,再调用predict()函数预测[4,5]、[-4,-3]、[2,6]三个点的坐标,输出结果分别为:[1, 0, 1],其中x和y坐标为正数的划分为一类,负数的一类。

    同时也可以计算K个最近点的下标和距离,代码和结果如下,其中,indices表示点的下标,distances表示距离。

    distances, indices = knn.kneighbors(X)  
    print(indices)
    print(distances)
    
    >>> 
    [1 0 1]
    [[0 1 3]
     [1 0 4]
     [2 3 5]
     [3 2 5]
     [4 1 0]
     [5 2 3]]
    [[ 0.          1.41421356  2.82842712]
     [ 0.          1.41421356  2.23606798]
     [ 0.          1.          2.        ]
     [ 0.          1.          2.23606798]
     [ 0.          2.23606798  3.60555128]
     [ 0.          2.          2.23606798]]
    >>> 
    

    下面通过一个完整的实例结合可视化技术进行讲解,加深读者的印象。


    3.KNN分析红酒类型

    (1) 数据集
    该实验数据集是UCI Machine Learning Repository开源网站提供的MostPopular Data Sets(hits since 2007)红酒数据集,它是对意大利同一地区生产的三种不同品种的酒,做大量分析所得出的数据。这些数据包括了三种类别的酒,酒中共13种不同成分的特征,共178行数据,如图13所示。

    在这里插入图片描述

    该数据集包括了三种类型酒中13种不同成分的数量,13种成分分别是:Alcohol、Malicacid、Ash、Alcalinity of ash、Magnesium、Total phenols、Flavanoids、Nonflavanoid phenols、Proanthocyanins、Color intensity、Hue、OD280/OD315 of diluted wines和Proline,每一种成分可以看成一个特征,对应一个数据。三种类型的酒分别标记为“1”、“2”、“3”。数据集特征描述如表3所示。

    在这里插入图片描述

    数据存储在wine.txt文件中,如图14所示。每行数据代表一个样本,共178行数据,每行数据包含14列,即第一列为类标属性,后面依次是13列特征。其中第1类有59个样本,第2类有71个样本,第3类有48个样本。

    在这里插入图片描述

    注意:前面讲述了如何读取CSV文件数据集或Sklearn扩展包所提供的数据集,但现实分析中,很多数据集会存储于TXT或DATA文件中,它们采用一定的符号进行分隔,比如图中采用逗号分隔,如何获取这类文件中的数据,也是非常重要的知识。所以接下来先教大家读取这类文件的数据。


    (2) 读取数据集
    从图14可以看到整个数据集采用逗号分隔,常用读取该类型数据集的方法是调用open()函数读取文件,依次读取TXT文件中所有内容,再按照逗号分割符获取每行的14列数据存储至数组或矩阵中,从而进行数据分析。这里讲述另一种方法,调用loadtxt()函数读取逗号分隔的数据,代码如下:

    # -*- coding: utf-8 -*-  
    import os 
    import numpy as np
    path = "wine/wine.txt"
    data = np.loadtxt(path,dtype=float,delimiter=",")
    print(data)
    

    输出如下所示:

    在这里插入图片描述

    loadtxt()读入文件函数原型如下:

    • loadtxt(fname, dtype, delimiter, converters, usecols)

    其中参数fname表示文件路径,dtype表示数据类型,delimiter表示分隔符,converters将数据列与转换函数进行映射的字段,如{1:fun},usecols表示选取数据的列。


    (3) 数据集拆分训练集和预测集
    由于Wine数据集前59个样本全是第1类,中间71个样本为第2类,最后48个样本是第3类,所以需要将数据集拆分成训练集和预测集。步骤如下:

    • 调用split()函数将数据集的第一列类标(Y数据)和13列特征(X数组)分隔开来。该函数参数包括data数据,分割位置,其中1表示从第一列分割,axis为1表示水平分割、0表示垂直分割。
    • 由于数据集第一列存储的类标为1.0、2.0或3.0浮点型数据,需要将其转换为整型,这里在for循环中调用int()函数转换,存储至y数组中,也可采用np.astype()实现。
    • 最后调用np.concatenate()函数将0-40、60-100、140-160行数据分割为训练集,包括13列特征和类标,其余78行数据为测试集。

    代码如下:

    # -*- coding: utf-8 -*-  
    import os 
    import numpy as np
    path = "wine/wine.txt"
    data = np.loadtxt(path,dtype=float,delimiter=",")
    print(data)
    
    yy, x = np.split(data, (1,), axis=1)
    print(yy.shape, x.shape)
    y = []
    for n in yy:
        y.append(int(n))
    
    train_data = np.concatenate((x[0:40,:], x[60:100,:], x[140:160,:]), axis = 0)  #训练集
    train_target = np.concatenate((y[0:40], y[60:100], y[140:160]), axis = 0)      #样本类别
    test_data = np.concatenate((x[40:60, :], x[100:140, :], x[160:,:]), axis = 0)  #测试集
    test_target = np.concatenate((y[40:60], y[100:140], y[160:]), axis = 0)        #样本类别
    
    print(train_data.shape, train_target.shape)
    print(test_data.shape, test_target.shape)
    

    输出结果如下:

    (178L, 1L)
    (178L, 13L)
    (100L, 1L) (100L, 13L)
    (78L, 1L) (78L, 13L)
    

    下面补充一种随机拆分的方式,调用 sklearn.model_selection.train_test_split 类随机划分训练集与测试集。代码如下:

    from sklearn.model_selection import train_test_split
    x, y = np.split(data, (1,), axis=1)
    x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.7)
    
    #Python2调用方法
    #from sklearn.cross_validation import train_test_split
    

    参数x表示所要划分的样本特征集;y是所要划分的样本结果;train_size表示训练样本占比,0.7表示将数据集划分为70%的训练集、30%的测试集;random_state是随机数的种子。该函数在部分版本的sklearn库中是导入model_selection类,建议读者下来尝试。


    (4) KNN分类算法分析
    上面已经将178个样本分成100个训练样本和78个测试样本,采用KNN分类算法训练模型,再对测试集进行预测,判别出测试样本所属于酒的类型,同时输出测试样本计算的正确率和错误率。KNN核心代码如下:

    from sklearn.neighbors import KNeighborsClassifier  
    clf = KNeighborsClassifier(n_neighbors=3,algorithm='kd_tree')
    clf.fit(train_data,train_target)
    result = clf.predict(test_data)
    print(result)
    

    预测输出结果如下所示:

    [1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 3 2 3 2 2 2 2
     2 2 3 3 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 1 2 3 3 2 2 3 2 3 2 2 2 1 2 2 2 3 1
     1 1 1 3]
    

    (5) 完整代码
    下面代码实现了调用Sklearn机器学习包中KNeighborsClassifier算法进行分类分析,并绘制预测的散点图和背景图,完整代码如下。

    # -*- coding: utf-8 -*-  
    # By:Eastmount CSDN 2021-07-06
    import os 
    import numpy as np
    from sklearn.neighbors import KNeighborsClassifier  
    from sklearn import metrics
    from sklearn.decomposition import PCA 
    import matplotlib.pyplot as plt
    from matplotlib.colors import ListedColormap
    
    #----------------------------------------------------------------------------
    #第一步 加载数据集
    path = "wine/wine.txt"
    data = np.loadtxt(path,dtype=float,delimiter=",")
    print(data)
    
    #----------------------------------------------------------------------------
    #第二步 划分数据集
    yy, x = np.split(data, (1,), axis=1) #第一列为类标yy,后面13列特征为x
    print(yy.shape, x.shape)
    y = []
    for n in yy:  #将类标浮点型转化为整数
        y.append(int(n))
    x = x[:, :2]  #获取x前两列数据,方便绘图 对应x、y轴
    train_data = np.concatenate((x[0:40,:], x[60:100,:], x[140:160,:]), axis = 0)  #训练集
    train_target = np.concatenate((y[0:40], y[60:100], y[140:160]), axis = 0)      #样本类别
    test_data = np.concatenate((x[40:60, :], x[100:140, :], x[160:,:]), axis = 0)  #测试集
    test_target = np.concatenate((y[40:60], y[100:140], y[160:]), axis = 0)        #样本类别
    print(train_data.shape, train_target.shape)
    print(test_data.shape, test_target.shape)
    
    #----------------------------------------------------------------------------
    #第三步 KNN训练
    clf = KNeighborsClassifier(n_neighbors=3,algorithm='kd_tree') #K=3
    clf.fit(train_data,train_target)
    result = clf.predict(test_data)
    print(result)
    
    #----------------------------------------------------------------------------
    #第四步 评价算法 
    print(sum(result==test_target))                             #预测结果与真实结果比对
    print(metrics.classification_report(test_target, result))   #准确率 召回率 F值
    
    #----------------------------------------------------------------------------
    #第五步 创建网格
    x1_min, x1_max = test_data[:,0].min()-0.1, test_data[:,0].max()+0.1    #第一列
    x2_min, x2_max = test_data[:,1].min()-0.1, test_data[:,1].max()+0.1    #第二列
    xx, yy = np.meshgrid(np.arange(x1_min, x1_max, 0.1),  
                         np.arange(x2_min, x2_max, 0.1))                   #生成网格型数据
    print(xx.shape, yy.shape)                                               #(53L, 36L) (53L, 36L)
    
    z = clf.predict(np.c_[xx.ravel(), yy.ravel()])                         #ravel()拉直函数
    print(xx.ravel().shape, yy.ravel().shape)                              #(1908L,) (1908L,)
    print(np.c_[xx.ravel(), yy.ravel()].shape)                             #合并 (1908L,2)
    
    #----------------------------------------------------------------------------
    #第六步 绘图可视化
    cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])         #颜色Map
    cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
    plt.figure()
    z = z.reshape(xx.shape)
    print(xx.shape, yy.shape, z.shape, test_target.shape)                 
    #(53L, 36L) (53L, 36L) (53L, 36L)  (78L,)
    plt.pcolormesh(xx, yy, z, cmap=cmap_light)
    plt.scatter(test_data[:,0], test_data[:,1], c=test_target,
                cmap=cmap_bold, s=50)
    plt.show()
    

    输出结果如下所示,包括预测的78行类标,共预测正确58行数据,准确率为0.76,召回率为0.74,f特征为0.74。其结果不太理想,需要进一步优化算法。

    [1 3 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 2 2 3 2 2 2 2 2 3 2 2 2 2 2
     2 1 2 2 2 3 3 3 2 2 2 2 3 2 3 1 1 2 3 3 3 3 3 1 3 3 3 3 3 3 3 1 3 2 1 1 3
     3 3 1 3]
    58
                 precision    recall  f1-score   support
    
              1       0.68      0.89      0.77        19
              2       0.88      0.74      0.81        31
              3       0.67      0.64      0.65        28
    
    avg / total       0.76      0.74      0.74        78
    

    在这里插入图片描述

    输出图形如图15所示,可以看到整个区域划分为三种颜色,左下角为绿色区域,右下角为红色区域,右上部分为蓝色区域。同时包括78个点分布,对应78行数据的类标,包括绿色、蓝色和红色的点。可以发现,相同颜色的点主要集中于该颜色区域,部分蓝色点划分至红色区域或绿色点划分至蓝色区域,则表示预测结果与实际结果不一致。

    在这里插入图片描述

    最后简单总结,整个分析过程包括六个步骤,大致内容如下:

    • 1) 加载数据集
      采用loadtxt()函数加载酒类数据集,采用逗号(,)分割。
    • 2) 划分数据集
      由于Wine数据集第一列为类标,后面13列为13个酒类特征,获取其中两列特征,并将其划分成特征数组和类标数组,调用concatenate()函数实现。
    • 3) KNN训练
      调用Sklearn机器学习包中KNeighborsClassifier()函数训练,设置K值为3类,并调用clf.fit(train_data,train_target)训练模型,clf.predict(test_data)预测分类结果。
    • 4) 评价算法
      通过classification_report()函数计算该分类预测结果的准确率、召回率和F值。
    • 5) 创建网格
      由于绘图中,拟将预测的类标划分为三个颜色区域,真实的分类结果以散点图形式呈现,故需要获取数据集中两列特征的最大值和最小值,并创建对应的矩阵网格,调用numpy扩展包的meshgrid()函数实现,在对其颜色进行预测。
    • 6) 绘图可视化
      设置不同类标的颜色,调用pcolormesh()函数绘制背景区域颜色,调用scatter()函数绘制实际结果的散点图,形成如图15的效果图。

    四.SVM分类算法

    支持向量机(Support Vector Machine,简称SVM)是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。该算法的最大特点是根据结构风险最小化准则,以最大化分类间隔构造最优分类超平面来提高学习机的泛化能力,较好地解决了非线性、高维数、局部极小点等问题。

    1.SVM基础知识

    (1) 基础概念
    由于作者数学推算能力不太好,同时SVM原理也比较复杂,所以SVM算法基础知识推荐大家阅读CSDN博客著名算法大神“JULY”的文章《支持向量机通俗导论(理解SVM的三层境界)》,这篇文章由浅入深的讲解了SVM算法,而本小节作者主要讲解SVM的用法。

    SVM分类算法的核心思想是通过建立某种核函数,将数据在高维寻找一个满足分类要求的超平面,使训练集中的点距离分类面尽可能的远,即寻找一个分类面使得其两侧的空白区域最大。如图19.16所示,两类样本中离分类面最近的点且平行于最优分类面的超平面上的训练样本就叫做支持向量。

    在这里插入图片描述

    (2) SVM导入方法
    SVM分类算法在Sklearn机器学习包中,实现的类是 svm.SVC,即C-Support Vector Classification,它是基于libsvm实现的。构造方法如下:

    SVC(C=1.0, 
    	cache_size=200, 
    	class_weight=None, 
    	coef0=0.0,
    	decision_function_shape=None, 
    	degree=3, 
    	gamma='auto', 
    	kernel='rbf',
    	max_iter=-1, 
    	probability=False, 
    	random_state=None, 
    	shrinking=True,
    	tol=0.001, 
    	verbose=False)
    

    其中参数含义如下:

    • C表示目标函数的惩罚系数,用来平衡分类间隔margin和错分样本的,默认值为1.0;
    • cache_size是制定训练所需要的内存(以MB为单位);
    • gamma是核函数的系数,默认是gamma=1/n_features;
    • kernel可以选择RBF、Linear、Poly、Sigmoid,默认的是RBF;
    • degree决定了多项式的最高次幂;
    • max_iter表示最大迭代次数,默认值为1;
    • coef0是核函数中的独立项;
    • class_weight表示每个类所占据的权重,不同的类设置不同的惩罚参数C,缺省为自适应;
    • decision_function_shape包括ovo(一对一)、ovr(多对多)或None(默认值)。

    SVC算法主要包括两个步骤:

    • 训练nbrs.fit(data, target)
    • 预测pre = clf.predict(data)

    下面这段代码是简单调用SVC分类算法进行预测的例子,数据集中x和y坐标为负数的类标为1,x和y坐标为正数的类标为2,同时预测点[-0.8,-1]的类标为1,点[2,1]的类标为2。

    import numpy as np
    from sklearn.svm import SVC
    
    X = np.array([[-1, -1], [-2, -2], [1, 3], [4, 6]])  
    y = np.array([1, 1, 2, 2])
    clf = SVC()  
    clf.fit(X, y)   
    print(clf)
    print(clf.predict([[-0.8,-1], [2,1]]))
    
    #输出结果:[1, 2]
    

    支持向量机分类器还有其他的方法,比如NuSVC核支持向量分类,LinearSVC线性向量支持分类等,这里不再介绍。同时,支持向量机也已经推广到解决回归问题,称为支持向量回归,比如SVR做线性回归。


    2.SVM分析红酒数据

    接着采用SVM分类算法对酒类数据集Wine进行分析,并对比前面19.3小节的实例代码,校验SVM分类算法和KNN分类算法的分析结果和可视化分析的优劣。其分析步骤基本一致,主要包括如下六个步骤:

    • 第一步,加载数据集。采用loadtxt()函数加载酒类数据集,采用逗号(,)分割。
    • 第二步,划分数据集。将Wine数据集划分为训练集和预测集,仅提取酒类13个特种中的两列特征进行数据分析。
    • 第三步,SVM训练。导入Sklearn机器学习包中svm.SVC()函数分析,调用fit()函数训练模型,predict(test_data)函数预测分类结果。
    • 第四步,评价算法。通过classification_report()函数计算该分类预测结果的准确率、召回率和F值。
    • 第五步,创建网格。获取数据集中两列特征的最大值和最小值,并创建对应的矩阵网格,用于绘制背景图,调用numpy扩展包的meshgrid()函数实现。
    • 第六步,绘图可视化。设置不同类标的颜色,调用pcolormesh()函数绘制背景区域颜色,调用scatter()函数绘制实际结果的散点图。

    完整代码如下所示:

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-06
    import os 
    import numpy as np
    from sklearn.svm import SVC  
    from sklearn import metrics
    import matplotlib.pyplot as plt
    from matplotlib.colors import ListedColormap
    
    #----------------------------------------------------------------------------
    #第一步 加载数据集
    path = "wine/wine.txt"
    data = np.loadtxt(path,dtype=float,delimiter=",")
    print(data)
    
    #----------------------------------------------------------------------------
    #第二步 划分数据集
    yy, x = np.split(data, (1,), axis=1) #第一列为类标yy,后面13列特征为x
    print(yy.shape, x.shape)
    y = []
    for n in yy:  #将类标浮点型转化为整数
        y.append(int(n))
    x = x[:, :2]  #获取x前两列数据,方便绘图 对应x、y轴
    train_data = np.concatenate((x[0:40,:], x[60:100,:], x[140:160,:]), axis = 0) #训练集
    train_target = np.concatenate((y[0:40], y[60:100], y[140:160]), axis = 0)     #样本类别
    test_data = np.concatenate((x[40:60, :], x[100:140, :], x[160:,:]), axis = 0) #测试集
    test_target = np.concatenate((y[40:60], y[100:140], y[160:]), axis = 0)       #样本类别
    print(train_data.shape, train_target.shape)
    print(test_data.shape, test_target.shape)
    
    #----------------------------------------------------------------------------
    #第三步 SVC训练
    clf = SVC()
    clf.fit(train_data,train_target)
    result = clf.predict(test_data)
    print(result)
    
    #----------------------------------------------------------------------------
    #第四步 评价算法 
    print(sum(result==test_target))                            #预测结果与真实结果比对
    print(metrics.classification_report(test_target, result))  #准确率 召回率 F值
    
    #----------------------------------------------------------------------------
    #第五步 创建网格 
    x1_min, x1_max = test_data[:,0].min()-0.1, test_data[:,0].max()+0.1    #第一列
    x2_min, x2_max = test_data[:,1].min()-0.1, test_data[:,1].max()+0.1    #第二列
    xx, yy = np.meshgrid(np.arange(x1_min, x1_max, 0.1),  
                         np.arange(x2_min, x2_max, 0.1))                   #生成网格型数据
    z = clf.predict(np.c_[xx.ravel(), yy.ravel()])                        
    
    #----------------------------------------------------------------------------
    #第六步 绘图可视化
    cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])         #颜色Map
    cmap_bold = ListedColormap(['#000000', '#00FF00', '#FFFFFF'])
    plt.figure()
    z = z.reshape(xx.shape)
    print(xx.shape, yy.shape, z.shape, test_target.shape)
    plt.pcolormesh(xx, yy, z, cmap=cmap_light)
    plt.scatter(test_data[:,0], test_data[:,1], c=test_target,
                cmap=cmap_bold, s=50)
    plt.show()
    

    代码提取了178行数据的第一列作为类标,剩余13列数据作为13个特征的数据集,并划分为训练集(100行)和测试集(78行)。输出结果如下,包括78行SVM分类预测的类标结果,其中61行数据类标与真实的结果一致,其准确率为0.78,召回率为0.78,F1特征为0.78。

    在这里插入图片描述

    最后可视化绘图输出如下图所示的结果。

    在这里插入图片描述


    3.优化SVM分析红酒数据集

    前面SVM分析红酒数据集的代码存在两个缺点,一是采用固定的组合方式划分的数据集,即调用np.concatenate()函数将0-40、60-100、140-160行数据分割为训练集,其余为预测集;二是只提取了数据集中的两列特征进行SVM分析和可视化绘图,即调用“x = x[:, :2]”获取前两列特征,而红酒数据集共有13列特征。

    真实的数据分析中通常会随机划分数据集,分析过程也是对所有的特征进行训练及预测操作,再经过降维处理之后进行可视化绘图展示。下面对SVM分析红酒数据集实例进行简单的代码优化,主要包括:

    • 随机划分红酒数据集
    • 对数据集的所有特征进行训练和预测分析
    • 采用PCA算法降维后再进行可视化绘图操作

    完整代码如下,希望读者也认真学习该部分知识,更好地优化自己的研究或课题。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-06
    import os 
    import numpy as np
    from sklearn.svm import SVC  
    from sklearn import metrics
    import matplotlib.pyplot as plt
    from matplotlib.colors import ListedColormap
    from sklearn.model_selection import train_test_split
    from sklearn.decomposition import PCA
    
    #第一步 加载数据集
    path = "wine/wine.txt"
    data = np.loadtxt(path,dtype=float,delimiter=",")
    print(data)
    
    #第二步 划分数据集
    yy, x = np.split(data, (1,), axis=1) #第一列类标yy,后面13列特征为x
    print(yy.shape, x.shape)
    y = []
    for n in yy: 
        y.append(int(n))
    y =  np.array(y, dtype = int) #list转换数组
    #划分数据集 测试集40%
    train_data, test_data, train_target, test_target = train_test_split(x, y, test_size=0.4, random_state=42)
    print(train_data.shape, train_target.shape)
    print(test_data.shape, test_target.shape)
    
    #第三步 SVC训练
    clf = SVC()
    clf.fit(train_data, train_target)
    result = clf.predict(test_data)
    print(result)
    print(test_target)
    
    #第四步 评价算法 
    print(sum(result==test_target))                            #预测结果与真实结果比对
    print(metrics.classification_report(test_target, result))  #准确率 召回率 F值
    
    #第五步 降维操作
    pca = PCA(n_components=2)      
    newData = pca.fit_transform(test_data)
                      
    #第六步 绘图可视化
    plt.figure()
    cmap_bold = ListedColormap(['#000000', '#00FF00', '#FFFFFF'])
    plt.scatter(newData[:,0], newData[:,1], c=test_target, cmap=cmap_bold, s=50)
    plt.show()
    

    输出结果如下所示,其准确率、召回率和F值很低,仅为50%、39%和23%。

    (106L, 13L) (106L,)
    (72L, 13L) (72L,)
    [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
     2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
    [1 1 3 1 2 1 2 3 2 3 1 3 1 2 1 2 2 2 1 2 1 2 2 3 3 3 2 2 2 1 1 2 3 1 1 1 3
     3 2 3 1 2 2 2 3 1 2 2 3 1 2 1 1 3 3 2 2 1 2 1 3 2 2 3 1 1 1 3 1 1 2 3]
    28
                 precision    recall  f1-score   support
    
              1       1.00      0.04      0.07        26
              2       0.38      1.00      0.55        27
              3       0.00      0.00      0.00        19
    
    avg / total       0.50      0.39      0.23        72
    

    上述代码如下采用决策树进行分析,则其准确率、召回率和F值就很高,结果如下所示。所以并不是每种分析算法都适应所有的数据集,不同数据集其特征不同,最佳分析的算也会不同,我们在进行数据分析时,通常会对比多种分析算法,再优化自己的实验和模型。

    from sklearn.tree import DecisionTreeClassifier 
    clf = DecisionTreeClassifier()
    print(metrics.classification_report(test_target, result))
    
    #             precision    recall  f1-score   support
    #
    #          1       0.96      0.88      0.92        26
    #          2       0.90      1.00      0.95        27
    #          3       1.00      0.95      0.97        19
    #
    #avg / total       0.95      0.94      0.94        72
    

    SVM算法分析后输出的图形如下所示。

    在这里插入图片描述


    五.各模型分类对比实验

    算法评价和对比实验是深度学习重要的知识点,这里作者对各种机器学习分类算法进行对比,以鸢尾花数据集为例,我们从绘制的分类边界效果以及实验评估指标(Precision、Recall、F1-socre)分别进行对比。参考文章如下,推荐大家学习:

    1.决策树

    原始代码如下:

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-06
    # 该部分参考知乎萌弟老师:https://zhuanlan.zhihu.com/p/173945775
    import numpy as np
    from sklearn import metrics
    from sklearn import datasets
    import matplotlib.pyplot as plt
    from matplotlib.colors import ListedColormap
    from sklearn.model_selection import train_test_split
    from sklearn.decomposition import PCA
    from sklearn.preprocessing import StandardScaler
    
    #------------------------------------------------------------------------
    #第一步 导入数据
    iris = datasets.load_iris()
    X = iris.data[:,[2,3]]
    y = iris.target
    print("Class labels:",np.unique(y))  #打印分类类别的种类 [0 1 2]
     
    #30%测试数据 70%训练数据 stratify=y表示训练数据和测试数据具有相同的类别比例
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)
    
    #------------------------------------------------------------------------
    #第二步 数据标准化
    sc = StandardScaler()      #估算训练数据中的mu和sigma
    sc.fit(X_train)            #使用训练数据中的mu和sigma对数据进行标准化
    X_train_std = sc.transform(X_train)
    X_test_std = sc.transform(X_test)
    print(X_train_std)
    print(X_test_std)
    
    #------------------------------------------------------------------------
    #第三步 可视化函数 画出决策边界
    def plot_decision_region(X,y,classifier,resolution=0.02):
        markers = ('s','x','o','^','v')
        colors = ('red','blue','lightgreen','gray','cyan')
        cmap = ListedColormap(colors[:len(np.unique(y))])
        
        # plot the decision surface
        x1_min,x1_max = X[:,0].min()-1,X[:,0].max()+1
        x2_min,x2_max = X[:,1].min()-1,X[:,1].max()+1
        xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,resolution),
                             np.arange(x2_min,x2_max,resolution))
        Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
        Z = Z.reshape(xx1.shape)
        plt.contourf(xx1,xx2,Z,alpha=0.3,cmap=cmap)
        plt.xlim(xx1.min(),xx1.max())
        plt.ylim(xx2.min(),xx2.max())
        
        # plot class samples
        for idx,cl in enumerate(np.unique(y)):
            plt.scatter(x=X[y==cl,0],
                       y = X[y==cl,1],
                       alpha=0.8,
                       c=colors[idx],
                       marker = markers[idx],
                       label=cl,
                       edgecolors='black')
    
    #------------------------------------------------------------------------
    #第四步 决策树分类
    from sklearn.tree import DecisionTreeClassifier
    tree = DecisionTreeClassifier(criterion='gini',max_depth=4,random_state=1)
    tree.fit(X_train_std,y_train)
    print(X_train_std.shape, X_test_std.shape, len(y_train), len(y_test)) #(105, 2) (45, 2) 105 45
    res1 = tree.predict(X_test_std)
    print(res1)
    print(metrics.classification_report(y_test, res1, digits=4)) #四位小数
    
    plot_decision_region(X_train_std,y_train,classifier=tree,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('DecisionTreeClassifier')
    plt.legend(loc='upper left')
    plt.show()
    

    实验的精确率、召回率和F1值输出如下:

    • macro avg: 0.9792 0.9778 0.9778
                  precision    recall  f1-score   support
    
               0     1.0000    1.0000    1.0000        15
               1     0.9375    1.0000    0.9677        15
               2     1.0000    0.9333    0.9655        15
    
        accuracy                         0.9778        45
       macro avg     0.9792    0.9778    0.9778        45
    weighted avg     0.9792    0.9778    0.9778        45
    

    绘制的训练数据分类效果如下图所示,可以看到分类效果明显。

    在这里插入图片描述


    2.KNN

    核心代码如下:

    • macro avg: 0.98 0.98 0.98
    #第五步 KNN分类
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=2,p=2,metric="minkowski")
    knn.fit(X_train_std,y_train)
    res2 = knn.predict(X_test_std)
    print(res2)
    print(metrics.classification_report(y_test, res2, digits=4)) #四位小数
    
    plot_decision_region(X_train_std,y_train,classifier=knn,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('KNeighborsClassifier')
    plt.legend(loc='upper left')
    plt.show()
    

    输出结果如下:

    • macro avg: 0.9792 0.9778 0.9778
                  precision    recall  f1-score   support
    
               0     1.0000    1.0000    1.0000        15
               1     0.9375    1.0000    0.9677        15
               2     1.0000    0.9333    0.9655        15
    
        accuracy                         0.9778        45
       macro avg     0.9792    0.9778    0.9778        45
    weighted avg     0.9792    0.9778    0.9778        45
    

    绘制的训练数据分类效果如下图所示:

    在这里插入图片描述


    3.SVM

    核心代码如下:

    #第六步 SVM分类 核函数对非线性分类问题建模(gamma=0.20)
    from sklearn.svm import SVC
    svm = SVC(kernel='rbf',random_state=1,gamma=0.20,C=1.0) #较小的gamma有较松的决策边界
    svm.fit(X_train_std,y_train)
    res3 = svm.predict(X_test_std)
    print(res3)
    print(metrics.classification_report(y_test, res3, digits=4))
    
    plot_decision_region(X_train_std,y_train,classifier=svm,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('SVM')
    plt.legend(loc='upper left')
    plt.show()
    

    输出结果如下:

    • macro avg: 0.9361 0.9333 0.9340
                  precision    recall  f1-score   support
    
               0     1.0000    0.9333    0.9655        15
               1     0.9333    0.9333    0.9333        15
               2     0.8750    0.9333    0.9032        15
    
        accuracy                         0.9333        45
       macro avg     0.9361    0.9333    0.9340        45
    weighted avg     0.9361    0.9333    0.9340        45
    

    绘制的训练数据分类效果如下图所示:

    在这里插入图片描述

    如果使用的核函数gamma为100,然后实现非线性分类,则绘制结果如下图所示:

    • svm = SVC(kernel=‘rbf’,random_state=1,gamma=100.0,C=1.0,verbose=1)

    在这里插入图片描述

    引用萌弟老师的结论,非常土建大家去关注他。
    从不同的gamma取值的图像来看:对于高斯核函数,增大gamma值,将增大训练样本的影响范围,导致决策边界紧缩和波动;较小的gamma值得到的决策边界相对宽松。虽然较大的gamma值在训练样本中有很小的训练误差,但是很可能泛化能力较差,容易出现过拟合。


    4.逻辑回归

    核心代码如下:

    #第七步 逻辑回归分类
    from sklearn.linear_model import LogisticRegression
    lr = LogisticRegression(C=100.0,random_state=1)
    lr.fit(X_train_std,y_train)
    res4 = lr.predict(X_test_std)
    print(res4)
    print(metrics.classification_report(y_test, res4, digits=4))
    
    plot_decision_region(X_train_std,y_train,classifier=lr,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('LogisticRegression')
    plt.legend(loc='upper left')
    plt.show()
    

    输出结果如下:

    • macro avg: 0.9792 0.9778 0.9778
                  precision    recall  f1-score   support
    
               0     1.0000    1.0000    1.0000        15
               1     0.9375    1.0000    0.9677        15
               2     1.0000    0.9333    0.9655        15
    
        accuracy                         0.9778        45
       macro avg     0.9792    0.9778    0.9778        45
    weighted avg     0.9792    0.9778    0.9778        45
    

    绘制的训练数据分类效果如下图所示:

    在这里插入图片描述


    5.朴素贝叶斯

    核心代码如下:

    #第八步 朴素贝叶斯分类
    from sklearn.naive_bayes import GaussianNB
    gnb = GaussianNB()
    gnb.fit(X_train_std,y_train)
    res5 = gnb.predict(X_test_std)
    print(res5)
    print(metrics.classification_report(y_test, res5, digits=4))
    
    plot_decision_region(X_train_std,y_train,classifier=gnb,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('GaussianNB')
    plt.legend(loc='upper left')
    plt.show()
    

    输出结果如下:

    • macro avg: 0.9792 0.9778 0.9778
                  precision    recall  f1-score   support
    
               0     1.0000    1.0000    1.0000        15
               1     0.9375    1.0000    0.9677        15
               2     1.0000    0.9333    0.9655        15
    
        accuracy                         0.9778        45
       macro avg     0.9792    0.9778    0.9778        45
    weighted avg     0.9792    0.9778    0.9778        45
    

    绘制的训练数据分类效果如下图所示,还挺好看的,边界呈曲线分布。

    在这里插入图片描述


    6.随机森林

    核心代码如下:

    #第九步 随机森林分类
    from sklearn.ensemble import RandomForestClassifier
    forest = RandomForestClassifier(criterion='gini',
                                    n_estimators=25,
                                    random_state=1,
                                    n_jobs=2,
                                    verbose=1)
    forest.fit(X_train_std,y_train)
    res6 = gnb.predict(X_test_std)
    print(res6)
    print(metrics.classification_report(y_test, res6, digits=4))
    
    plot_decision_region(X_train_std,y_train,classifier=forest,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('GaussianNB')
    plt.legend(loc='upper left')
    plt.show()
    

    输出结果如下:

    • macro avg: 0.9792 0.9778 0.9778
                  precision    recall  f1-score   support
    
               0     1.0000    1.0000    1.0000        15
               1     0.9375    1.0000    0.9677        15
               2     1.0000    0.9333    0.9655        15
    
        accuracy                         0.9778        45
       macro avg     0.9792    0.9778    0.9778        45
    weighted avg     0.9792    0.9778    0.9778        45
    

    绘制的训练数据分类效果如下图所示:

    在这里插入图片描述


    7.AdaBoost

    核心代码如下:

    #第十步 集成学习分类
    from sklearn.ensemble import AdaBoostClassifier
    ada = AdaBoostClassifier()
    ada.fit(X_train_std,y_train)
    res7 = ada.predict(X_test_std)
    print(res7)
    print(metrics.classification_report(y_test, res7, digits=4))
    
    plot_decision_region(X_train_std,y_train,classifier=forest,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('AdaBoostClassifier')
    plt.legend(loc='upper left')
    plt.show()
    

    输出结果如下:

    • macro avg: 0.9792 0.9778 0.9778
                  precision    recall  f1-score   support
    
               0     1.0000    1.0000    1.0000        15
               1     0.9375    1.0000    0.9677        15
               2     1.0000    0.9333    0.9655        15
    
        accuracy                         0.9778        45
       macro avg     0.9792    0.9778    0.9778        45
    weighted avg     0.9792    0.9778    0.9778        45
    

    绘制的训练数据分类效果如下图所示:

    在这里插入图片描述


    8.GradientBoosting

    核心代码如下:

    #第11步 GradientBoosting分类
    from sklearn.ensemble import GradientBoostingClassifier
    gb = GradientBoostingClassifier()
    ada.fit(X_train_std,y_train)
    res8 = ada.predict(X_test_std)
    print(res8)
    print(metrics.classification_report(y_test, res8, digits=4))
    
    plot_decision_region(X_train_std,y_train,classifier=forest,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.title('GradientBoostingClassifier')
    plt.legend(loc='upper left')
    plt.show()
    

    输出结果如下:

    • macro avg: 0.9792 0.9778 0.9778
                  precision    recall  f1-score   support
    
               0     1.0000    1.0000    1.0000        15
               1     0.9375    1.0000    0.9677        15
               2     1.0000    0.9333    0.9655        15
    
        accuracy                         0.9778        45
       macro avg     0.9792    0.9778    0.9778        45
    weighted avg     0.9792    0.9778    0.9778        45
    

    绘制的训练数据分类效果如下图所示:

    在这里插入图片描述


    9.实验结果对比

    最后通常需要对实验结果进行对比,由于数据集比较少,所有效果都比较好,这里不太好进行对比实验。简单给出两张对比结果图,但方法是类似的。随着作者深入会分享更多相关文章。

    在这里插入图片描述

    在这里插入图片描述


    六.本章小结

    写到这里,这篇文章就结束了,您是否对分类更好的认识呢?
    聚类是通过定义一种距离度量方法,表示两个东西的相似程度,然后将类内相似度高且类间相似度低的数据放在一个类中,它是不需要标注结果的无监督学习算法。与之不同,分类是需要标注类标的,属于有监督学习,它表示收集某一类数据的共有特征,找出区分度大的特征,用这些特征对要分类的数据进行分类,并且由于是标注结果的,可以通过反复地训练来提升分类算法。

    常见的分类算法包括朴素贝叶斯、逻辑回归、决策树、支持向量机等。常见应用比如通过分析市民历史公交卡交易数据来分类预测乘客的出行习惯和偏好;京东从海量商品图片中提取图像特征,通过分类给用户推荐商品和广告,比如“找同款”应用;基于短信文本内容的分类智能化识别垃圾短信及其变种,防止骚扰手机用户;搜索引擎通过训练用户的历史查询词和用户属性标签(如性别、年龄、爱好),构建分类算法来预测新增用户的属性及偏好等。不同的分类算法有不同的优劣,希望读者下来编写代码体会不同的分类算法的特点。

    在这里插入图片描述

    最后希望读者能复现每一行代码,只有实践才能进步。同时更多聚类算法和原理知识,希望读者下来自行深入学习研究,也推荐大家结合Sklearn官网和开源网站学习更多的机器学习知识。

    该系列所有代码下载地址:

    感谢在求学路上的同行者,不负遇见,勿忘初心。这周的留言感慨~

    在这里插入图片描述

    (By:娜璋之家 Eastmount 2021-07-10 夜于武汉 https://blog.csdn.net/Eastmount )


    参考文献:

    • [1] 杨秀璋. 专栏:知识图谱、web数据挖掘及NLP - CSDN博客[EB/OL]. (2016-09-19)[2017-11-07]. http://blog.csdn.net/column/details/eastmount-kgdmnlp.html.
    • [2] 张良均,王路,谭立云,苏剑林. Python数据分析与挖掘实战[M]. 北京:机械工业出版社,2016.
    • [3] (美)Wes McKinney著. 唐学韬等译. 利用Python进行数据分析[M]. 北京:机械工业出版社,2013.
    • [4] Jiawei Han,Micheline Kamber著. 范明,孟小峰译. 数据挖掘概念与技术. 北京:机械工业出版社,2007.
    • [5] 杨秀璋. [Python数据挖掘课程] 四.决策树DTC数据分析及鸢尾数据集分析[EB/OL].(2016-10-15)[2017-11-26]. http://blog.csdn.net/eastmount/article/details/52820400.
    • [6] 杨秀璋. [Python数据挖掘课程] 五.线性回归知识及预测糖尿病实例[EB\OL]. (2016-10-28)[2017-11-26]. http://blog.csdn.net/eastmount/article/details/52929765.
    • [7] jackywu1010. 分类算法概述与比较[EB/OL]. (2011-12-09)[2017-11-26]. http://blog.csdn.net/jackywu1010/article/details/7055561.
    • [8] 百度百科. 邻近算法[EB/OL]. (2015-09-16)[2017-11-26]. https://baike.baidu.com/item/邻近算法/1151153?fr=aladdin.
    • [9] 杨秀璋. [python数据挖掘课程] 十九.鸢尾花数据集可视化、线性回归、决策树花样分析[EB/OL]. (2017-12-02)[2017-12-02]. http://blog.csdn.net/eastmount/article/
      details/78692227.
    • [10]杨秀璋. [python数据挖掘课程] 二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取[EB/OL]. (2017-12-08)[2017-12-08]. http://blog.csdn.net/eastmount/article/
      details/78747128.
    • [11] lsldd. 用Python开始机器学习(4:KNN分类算法)[EB/OL]. (2014-11-23)[2017-11-26]. http://blog.csdn.net/lsldd/article/details/41357931.
    • [12] UCI官网. UCI Machine Learning Repository: Wine Data Set[EB/OL]. (2017)[2017-12-08]. http://archive.ics.uci.edu/ml/datasets/Wine.
    • [13]杨秀璋. [python数据挖掘课程] 二十一.朴素贝叶斯分类器详解及中文文本舆情分析[EB/OL]. (2018-01-24)[2018-01-24]. http://blog.csdn.net/eastmount/article/
      details/79128235.
    • [14] scikit-learn官网. Nearest Neighbors Classification scikit-learn[EB\OL]. (2017)[2017-12-08]. http://scikit-learn.org/stable/auto_examples/neighbors/
      plot_classification.html#sphx-glr-auto-examples-neighbors-plot-classification-py.
    • [15]July大神. 支持向量机通俗导论(理解SVM的三层境界)[EB/OL]. http://blog.csdn.net/v_JULY_v/article/details/7624837.
    展开全文
  • 按大类分,无外乎三类:卖广告、卖产品/服务、增值服务。 今天重点说说广告的变现模式,并主要解决两个问题: ⼴告从何来? 怎样的广告策略才能让流量变现最大化? 广告来源可以有很多渠道,分两个大类: 直投...

    1. 项目背景

    在互联网上,流量=变现

    流量变现的⽅式有很多种,不同的产品/平台,变现模式不一样。按大类分,无外乎三类:卖广告卖产品/服务增值服务

    今天重点说说广告的变现模式,并主要解决两个问题:

    1. ⼴告从何来?

    2. 怎样的广告策略才能让流量变现最大化?

    广告来源可以有很多渠道,分两个大类:

    1. 直投客户:来⾃自己销售,或代理公司。

    这⾥的直投是指直接在流量⽅广告系统投放,可以自建也可以使用第三方⼴告系统。

    在变现上,DAU千万级以上的产品就不用过于发愁了,不管是自建销售队伍还是走代理公司,一般都是 广告主或代理公司争抢的TOP流量。只要想变现,还是不缺广告填充的,因为平台级产品是可以掰着⼿指头数的过来的。

    ⽽且有了这么大量级的⽤户,变现的玩法更多,如果哪家用户过千万级产品还苦于没钱赚,那负责变现的朋友自动下课好了。

    1. DSP(或SSP、或联盟广告)

    对于DAU规模在⼤几十万甚⾄百万级别的产品(垂直细分类产品除外,如⾦融类),流量有了⼀定的广告价值,可能会有广告主或代理公司主动找上门要求投放,但这类基本属于守株待兔型的,如果不主动出击,可能都解决不了温饱问题。

    如果往前推个⼗年,⽹站只要稍微有点流量,不少都是靠在底部留个联系方式等广告上门,⽽且客户还真不少,因为那会的环境是狼少肉多。

    特别对于流量规模更小的APP或个⼈网站,基本没有销售队伍或者销售能力,⼴告填充基本都是来自于 DSP或联盟广告。

    怎样的广告策略才能让流量变现最大化?

    通过数据驱动,将数据作为生产资料,通过科学的方法,运⽤到业务经营过程中,并不断作出正向的反馈,促进业务优化提高。

    image-20210723115555938

    2. 数据管理平台

    数据管理平台是互联网⼴告体系中非常重要的一部分

    • 是广告主实现自身数据增值的重要工具,⼴告主通过大数据分析消费者的行为,可以将⼴告更有针对性地传达给“刚需客户”。
    • 通过数据统计分析用户的访问行为和喜好,将内容更有针对性地推送给用户,提高⽤户访问的粘性,增大⽹站的流量。
    • 数据管理理平台提供了多维度的查询接⼝,让广告主和运营人员能够实时的查看数据效果展示。

    从数据角度来看,通过数据管理平台,需求方平台的广告投放的效果得到增强,并通过直观的数据展示,也让更多的广告主认可了广告投放平台,通过数据的应用为广告主和公司创造了收益。

    3. DSP广告系统架构

    DSP广告系统架构

    3.1 DSP是什么

    ​ DSP(Demand-Side Platform),就是需求方平台,以精准营销为核心理念。允许广告客户和广告机构更方便地访问,以及更有效地购买广告库存(流量)。

    3.2 DSP是⼲什么的

    ​ 为需求方(即⼴告主或代理商)提供实时竞价投放平台,需求方可以在DSP平台上管理广告活动及其投放策略,包括目标受众的定向条件、预算、创意、出价等等,DSP可以通过技术和算法优化投放效果, 提供数据报告,使需求方清晰明了的看到⾃己的广告效果。

    说白点就是把产品的广告直接送到目标客户⾯前

    image-20210723133543275

    3.3 DSP的⽬标

    ​ 使用程序的方式进行广告的投放的管理,并利用算法和技术自动实现精准的目标受众定向,只把广告投放给对的人。

    ​ 对广告主⽽言,使⽤程序化购买不仅能提高流量采购效率,更低成本的或可靠,稳定的流量,还能使用各种策略,投放不同的目标人群,使得广告的投放效果更加可控。减少⼴告浪费的同时,提升转化率, 扩大覆盖面积,最终实现跨终端的投放管理和效果追踪

    ​ 对媒体资源⽽言,使⽤程序化管理的⽅式,能实现资源的⾃动化售卖,提高流量的使用率,有效利用优质流量和⻓尾流量,并且能基于人群的属性、兴趣等标签,对不同流量给出不同售价,提升流量库的收入。

    3.4 DSP怎么做的

    ​ 简单讲,就是DSP平台先对接媒体,如微博、腾讯、头条、OPPO、ZAKER等资源,再通过实时竞价(RTB)的方式,让广告主自主选择投放的媒体及投放的客户群体,进⾏⼴告投放~

    3.5 DSP投放系统架构图

    image-20210723144750757

    3.5.1 RTB竞价逻辑

    image-20210723150613580

    3.6 平台核心要素

    3.6.1 流量资源

    ​ 不同的流量资源会有不同的效果,如何选择媒体和广告位是关键。平台上各种站点,频道,广告位,⼴告投放前制定投放策略,需要根据投放KPI(即⼴告主用于评估效果的关键指标)选择适合的媒体。 制定媒体策略⾸先需要分析目标受众,根据目标受众选择匹配的媒体资源。媒体策略可以从所要投放的 广告位所在页面(page)、位置(spot)、流量 (inventory)、价格(price)和转化(conversion)五个角度来制定。

    • 页面: 包括渠道、载体(PC/WAP/APP)、媒体分类、频道、URL、页面关键词 等。

    • 位置: ⼴告位所在的具体位置、尺寸的⼤小、⼴告位类型、屏次(如⾸屏、第二 屏)等,都会影响广告 的有效性。

    • 流量: 总流量的大⼩决定着能采购的流量⼤小。⽐如,每天需要投放3,000,000个 展示,那么起码得先确保所选媒体的总流量⼤于这个量级。需求⽅平台通常有流量预估功能,可以为需求方的流量采购提供一定的参考价值。

    • 价格: 广告主KPI⼀般会对单价或量级有要求,要在有限的投放预算里⾯满足 KPI,就得考虑价格。在竞价环境中,价格是不固定的,但是我们可以参考历史投放的平均价格。

    • 转化: 除了参考流量和价格,还需要参考历史转化情况,以达到更好的媒体效果预估。

    3.6.2 投放策略及受众定向

    1. 基础设置
    • 出价上限,可以按照CPM(Cost Per Mille:展现成本,或者叫千人展现成本)或CPC(Cost Per Click点击成本,即每产生一次点击所花费的成本)设置,⼴告主可以设置好能承受的价格上限,将投放成本控制在可接受范围。附:还有个CPA(Cost Per Action):每行动成本。即按行动收费
    • 预算控制,提前设置好预算可以避免消耗过度,预算分为每⽇预算、总预算。在平台上还可以设置曝光数限制和点击数量限制,相应的有每⽇日曝光数、总曝光数或每日点击数、总点击数。
    • 频次控制,频次控制是指⼴告主设置的同一个⽤户在设定时间内看到特定广告的总次数,或者在设定时间内看到某个广告素材的总次数。⼀方面,在预算有限的情况下,有效的频次控制可以覆盖到更多的用户;另一⽅⾯,同段时间内对同一用户进行⼤量曝光或者大量重复同一广告素材的意义不不大,有效的频次控制还能在⼀定程度上提升点击率和转化率。
    • 投放时间,设置投放⽇期或投放时段,也可以设置为不不限制。投放日期或每日的投放时段都会对广告效果产⽣影响,⽐如周末、晚上高峰阶段。
    1. 受众定向
    • 地区定向,指定投放区域,包括国家、省份、城市等。
    • 客户端定向,设置受众的操作系统、浏览器器、系统语言等。
    • 移动设备,包括设备类型(如手机、平板)、设备品牌(如 Apple、华为)和设备型号等。
    • 人群标签定向,基于DMP(Data Management Platform 数据管理平台)系统,可以选着不同兴趣爱好的人群进行⼴告投放,以实现更精准的⼈群覆盖

    3.6.3 创意内容

    ​ 选择好广告位和对应的⼈群,还需要有适合的创意匹配用户的喜好。即使是同一个广告位,甚至是同一个用户,对不同创意素材的反应都是不同的。制作创意首先要把握好创意形式(Format)和⽤户交互 (Engagement)方式。

    ​ 创意形式是指素材是以什么文件形式呈现,比如图片、文字、图文、Flash、视频、表单或者其它。目前来看,视频创意和图文创意(如信息流)创意形式最佳,这跟广告位特性有关,这些广告位的价格也比普通广告位高一些。用户交互是指用户在素材上进行什么动作,如点击切换动态创意、在创意上填写注册信息、 点击⼴告后扩展素材、甚至是语音提交信息。

    • 图片PC
    • ⼩灯泡
    • 动态创意

    3.7 数据指标

    ​ 作为广告主一方,在广告投放过程中,必须要需要关注广告的投放效果,以及时调整投放策略,达到效果最大化,关注的指标包含: 请求,展示,点击,花费基础指标,以及不同时间段,不同⽹网站,策略,创意,广告形式,省市,频次的⾼阶指标

    3.7.1 基础指标

    • 请求数:包含总请求数,有效请求数,参与竞价数,赢得竞价数

    • CPC:每点击成本,即⼴告被点击一次对应的价格。⽤公式表示即 CPC=Cost/Click。如果结算类型是CPC,那么CPC和CTR会是主要的考核和优化⽬目标

    • CPM:每千人成本, 即广告被展示一千次对应的价格。⽤公式表示即 CPM= (Cost/Impression)*1000。如果结算类型是CPM,⼀般会从CPM和CTR着⼿手

    • CTR:指广告的点击率,即广告点击次数占广告展示次数的百分比。⽤公式表示即CTR= (Click/Impression)*100%

    3.7.2 高阶指标

    • 独⽴访客数(UV):Unique Visitor数量,指在特定时间内访问页⾯的虚拟自然人(用客户端标识)的总数。

    • 访问数 …

    • 网站到达率:指⽤户到达landingpage的数量和点击数的比值,⽤于衡量该环节用户流失率

    • 频次:分为离线频次和累计频次,指对每个独立用户的曝光频次

    • 网站浏览量:⽤户到达目标页面产生的浏览量

    • 二跳率:…

    • 平均停留时间:该次投放用户到达目标页面后的平均停留时间

    • 下载,激活,注册:该次⼴告投放引导用户下载,激活,注册的数量付款⾦额,付款人次,该次广告投放引导用户产生⽀付的金额,人次

    4. 需求分析

    1. ⼴告主要看实时统计广告效果数据,并且支持多维度分析

    2. 把服务端⼴告竞价阶段的信息补充到客户端上报的日志里,需要实时⽇志拼接

    3. 还有最基本的保证数据的准确性,需要有离线流程定时做数据修复

    5. 架构选型

    • 技术选型(1) 方案一:

      • 广告请求时把信息编码到广告url里面, 曝光和点击的时候再上报。
      • 缺点:
        • 广告url过长,“偷”⽤户流量,移动端优质APP难以接受。
        • 不能放入过多的信息。
    • 技术选型(2) 方案二:

      • 在实时处理引擎里面实现流式关联
      • 缺点:
        • join 窗⼝的双流数据都是被缓存在内存中的,也就是说如果某个key上的窗口数据太多就会导致 JVM OOM。
        • 广告下发后的曝光,转化等数据可能需要几天之后才能回传回来,内存无法缓存如此长时间的请求数据。
    • 技术选型(3) 方案三:

      • 广告请求信息写入kv store(redis和HBase),⼴告曝光和点击时查询kv store(HBase),做日志关联
      • 优点:
        • 不需要使用移动端回传
        • kv store(HBase)里保存近1个月的数据,作为兜底逻辑,可保证拼接率
        • redis里保存近两个小时的数据,大部分的查询能命中 cache

    6. 数据管理平台(DMP)整体流程介绍

    DMP是把分散的多方数据进行整合纳入统一的技术平台,并对这些数据进行标准化和细分,让用户可以把这些细分结果推向现有的互动营销环境里的平台。能够为广告投放提供人群标签进行受众精准定向,并通过投放数据建立用户画像,进行人群标签的管理以及再投放。 代表有:百分点、达摩盘等。

    1. 为什么要有这个平台,平台的功能

      1. 服务于DSP系统模型
      2. 服务于广告主看数需求
    2. 采集

      1. 竞价引擎日志如何采集、如何进kafka、为啥进kafka、如何保障稳定性
      2. client用户上报日志如何采集、如何进kafka、不落地如何保证数据不丢
      3. ⼴告主回传数据:在微信朋友圈投广告,为什么要回传,如何回传
    3. 处理

    4. 结果展示

    7. 平台的架构难

    1. 实时拼接

      1. 拼接率
      2. 拼接失败重试方案
      3. 准确性
    2. 读取kv的压⼒

    3. 数据重复问题

    4. 多维数据分析

    8. 如何从架构设计上解决这些问题

    1. *实时引擎选型

    2. 拼接失败重试方案

    3. 实时拼接,采用离线来修复

    4. 存储引擎选型,读取kv的压力,读kv慢,flink处理能力下降,数据处理不过来

    5. 数据重复问题,⽇志加event_id

    6. *多维分析引擎选型

    9. 架构设计

    数据收集 --> 数据预处理 -->数仓建模(分层设计 事实表 维度建模) --> 需求案例实现

    LAMBDA

    image-20210723140815395

    展开全文
  • 10种常见的移动端App广告展现形式

    万次阅读 2019-06-27 14:07:36
    App广告,或称In-App广告,是指智能手机和平板电脑这类移动设备中第三方应用程序内置广告,属于移动广告的子类别。 App广告兴起得益于其载体—App的风行。平板电脑和大屏触摸手机等硬件的普遍使用,WiFi、3G、4G对...

    何为App广告?
    App广告,或称In-App广告,是指智能手机和平板电脑这类移动设备中第三方应用程序内置广告,属于移动广告的子类别。

    10种常见的移动端App广告形式
    App广告兴起得益于其载体—App的风行。平板电脑和大屏触摸手机等硬件的普遍使用,WiFi、3G、4G对流量限制的解放,以及Apple苹果公司App Store生态系统带来的全新交互体验促使App受众和App开发者大幅度增加。对于App开发者,需要一种方式将流量变现,而对于品牌企业, 广告投放需要随消费者注意力迁移,因此,App内置广告应运而生。
    (内容摘自百度百科)
    在这里插入图片描述

    互联网广告的计费方式

    互联网广告可分为两种形式,一种是效果广告,另一种是形象(品牌)广告。

    • 效果广告(通过广告的效果促进消费者行动或消费)
      效果广告
      AIDA 模型流程图

    效果广告是指以效果计费的广告类型,例如用户点击(CPC)、回应(CPP)、注册下载(CPA)、销售数量(CPS)等作为广告的计费衡量标准。

    除了以效果计费的付费形式,还有以千次展现来计费的CPM,以包断时间来计费的CPT。

    常见的广告类型:

    CPM:(Cost Per Mille / Cost Per Thousand)
    每千人成本,这是源自传统媒体的计费方式,结算单位是每千人。
    千人价格=(广告费用/到达人数)×1000。
    CPT:(Cost Per Time)
    按时段收费,也是源自传统媒体的计费方式。
    CPC:(Cost Per Click)
    每点击成本,这是网络广告界一种常见的定价形式,同样也延续到了移动互联网,结算单位是每次点击,适用于效果付费广告形式。
    CPA:(Cost Per Action)
    每行动成本,结算单位是每次激活、下载等动作。
    CPS:(Cost Per Sales)
    每销售成本,以实际销售产品数量来换算广告刊登金额,结算单位是每次订单/每次交易。
    CPP:(Cost Per Person)
    App频控视频广告的计费方式,以有效到达受众为结算单位。这里的有效受众是指主动点击+浏览视频内容+浏览活动信息。

    App广告的常见形式

    1.Banner

    Banner广告又叫横幅广告、通栏广告、广告条。
    常出现位置:顶部、底部。
    优点: 展示更直观,能快速吸引用户注意。
    缺点: 影响用户体验,对内容观看造成一定的遮挡,易造成用户反感。
    计费方式:CPC。
    顶部Banner示意图底部Banner示意图

    2.公告

    这种方式常出现在电商类app上,通过消息广播的形式给用户传递相关信息。
    常出现位置:首页
    优点:直观简洁、不占用内容页。
    缺点:不能直观诱导用户点击,大多情况只能起提示作用。
    计费方式:CPC。
    公告示意图公告示意图

    3.插屏

    一般情况下插屏广告会出现在用户第一次点击某个功能页时弹出,显示需要提示的具体内容。
    常出现位置:首页、未点击的功能页。
    优点:视觉冲击力强、定位更精准、效果显著
    缺点:会暂时打断用户操作行为,影响用户体验。
    计费方式:CPA、CPM、CPC
    插屏示意图插屏示意图

    4.启动页广告

    启动页广告又称全屏广告(Full Screen Ads),几乎在常用的app上都能看到,可以以图片的形式、视频、Flash等形式加载。用户首次进入app时,将会出现启动页,当app后台运行再次进入时,启动页将不会出现。
    常出现位置:首页
    优点
    1.合理利用资源,等待app加载时呈现内容
    2.当用户刚打开启动页时,直接呈现广告内容,能够更好的刺激用户记忆。
    缺点:部分Flash安装包加在缓慢,影响用户体验。
    计费方式:CPM(启动页广告费用一般较高)
    启动页广告示意图启动页广告示意图

    5.信息流广告

    信息流广告(Feeds Ads),这种广告伴随着信息而出现,用户在浏览信息时会不经意间浏览到广告。
    常出现位置:以TimeLine信息为主的内容列表里。在社交类App和新闻类App上,信息流广告尤为明显,常见的有微博、贴吧、百度、今日头条等,都有。
    优点:不影响用户操作行为。
    缺点:内容定位不精准会让用户产生厌恶情绪。
    信息流广告示意图信息流广告示意图

    6.积分广告

    这种广告形式主要是通过下载注册赢取部分积分或优惠,以流量导流的方式把自身一部分用户流量导向目标app,实现流量变现。除此之外,一些第三方平台为了高额的广告收入,通过积分或话费的奖励形式,来激励用户下载推广的APP。
    常出现位置:部分移动端游戏、应用商店等app。
    优点:通过积分的方式实现互利共赢。
    缺点:品牌信誉度不强的情况下,容易让用户怀疑目标app的安全性,严重情况下会影响品牌形象。
    计费方式:CPA(例如注册下载),只要肯花钱,很容易就上到AppStore排行版,很多APP通过积分墙进行推广和刷榜。
    积分广告示意图

    7.视频广告

    视频广告针对的用户群体分为VIP用户和普通用户,VIP用户在购买VIP业务后能够直接跳过广告,普通用户则需要先把广告看完才能看后面的内容。所以,这种广告方式收入渠道分为两种:一种是会员业务,另一种是视频广告。
    常出现位置:播放类app内容开头。
    优点:以内嵌的形式植入广告,不增加额外的内容板块。
    缺点:普通用户(不愿意付费购买VIP业务)长时间观看会影响用户体验。
    在这里插入图片描述

    8.竞价排名

    竞价排名的基本特点是按点击付费,推广信息出现在搜索(靠前)的结果中,如果没有被用户点击,则不收取推广费。
    常出现位置:搜索引擎的搜索结果,如百度、UC、360、搜狗。
    优点:见效快、关键词数量无限制、关键词不分难易程度。
    缺点:搜索结果是以资金衡量,出现结果难免会造成用户意愿不匹配,影响用户体验。
    计费方式:CPC
    竞价排名广告示意图竞价广告示意图

    9.下拉刷新

    当列表内容需要刷新的时候,一般app会采用下拉刷新的形式刷新列表。广告便会填充空白页,达到宣传效果。
    常出现位置:下拉刷新栏。
    优点:隐藏在内容页面板下,用户刷新才会出现,节约空间成本,不影响用户体验。
    缺点:广告出现时间过短,不容易引起用户注意。
    下来刷新广告示意图下拉刷新广告示意图

    10、私信通知广告

    以私信的形式将商品信息发送给用户,用户可以通过查看私信了解商品详情。
    常出现位置:消息功能。
    优点:具有精准性,通过后台分析用户洗好发送特定商品。
    缺点:常常忽略用户需求,增大用户筛选成本。
    私信广告示意图
    以上图片仅做示意图使用,没有任何推广的意思,也没有任何侵权的意思,如果真的觉得被侵权了,私信删除!

    随着信息科技的进化,以及5G网络的商用、智能设备的进化,今后肯定会出现更多的广告形式,在这个到处充满着信息的空间里,到处都有流量,也就意味着后期会持续不断的出现的新的广告花样!

    展开全文
  • 广告是由可识别的出资人通过各种媒介,通常是有偿的、有组织的和非人员性劝服的,进行有关产品(商品、服务和观点)的信息传播活动。—— William Arens 《当代广告学》 数字营销简介 1、营销的概念 企业为获得...
  • 机器学习-常用回归算法归纳(全网之最)

    千次阅读 多人点赞 2021-10-28 17:31:55
    下面整理只给出每个算法最常用的解法。 关于机器学习&深度学习中,损失、代价、目标、成本含义解释 损失函数:真实值与预测值的差距 代价函数:所有样本损失值加总 / 样本数 目标函数:损失函数加了正则项 成本函数...
  • WordPress的分类页、Search页,Tag页等输出的文章列表时,如果想在中间位置(比如第5个文章后面)出现,可以用下面的代码: current_post == 4) : ?> (广告代码) found_posts current_post == ($wp_query->...
  • 腾讯社交联盟广告

    千次阅读 2021-06-03 14:02:19
    简介:激励视频广告是指将短视频融入到app场景当中,成为app“任务”之一,用户观看短视频广告后可以得到一些应用内奖励权限等级:开放适用场景:常见于游戏内的广告样式,多出现在游戏的复活、登录等位置,或者网服...
  • 量化的方法使计算广告学成为计算机科学与工程的一个崭新和重要的方向。 前言 所有能够传播信息的商品,其售价都会趋向其边际成本。 商业模式探索 电影的信息传播量很大,边际成本很低,与其售价不符,因此必定...
  • 1.广告位置的名称是分类树名称加左侧广告,然后在添加广告的是广告位置选择刚才设置的广告位置
  • 计算广告——广告定向实践

    千次阅读 2016-07-11 22:44:04
    计算广告学涉及到很多的不同的学科知识,包括大规模搜索,文本分析,机器学习,信息检索以及经济学等等。在计算广告中,其核心问题是在给定的环境下,找到用户和广告之间的最佳匹配,在斯坦福大学的计算广告学中如下...
  • 合约广告广告位合约展示量合约受众定向受众定向方法概览受众定向标签体系流量预测流量塑形在线分配第5章 搜索与竞价广告搜索广告搜索广告产品形态搜索广告产品新形式搜索广告产品策略位置拍卖与机制设计定价问题市场...
  • PolSARpro v6.0之Sentinel-1A Wishart与SVM监督分类

    千次阅读 多人点赞 2019-05-15 21:38:47
    根据我的经验,SVM监督分类是PolSARpro中监督分类效果比较好的一种,也是目前遥感图像分类常用成熟、稳定的算法。这个分类PolSARpro V5.1.3版本也能做,但是两个版本都有点bug,都不完美。 两个版本的PolSARpro...
  • 程序化广告(5):广告投放

    千次阅读 2019-11-14 10:32:19
    广告提案(proposal):广告公司通过PPT或者其他表现方式向广告客户描述广告投放解决方案的报告,目的在于获取客户的认可和支持,赢得客户的广告投放预算。 广告提案重点要分析广告投放目标和KPI需求。以人为中心,...
  • 1. 写在前面 参考: 个性化广告推荐系统 推荐系统算法基础
  • 邮件分类消歧过程 主题规则学习过程 在第一阶段我们主要通过规则进行匹配,这里使用了之前DataCon黑产比赛的部分种子作为规则库,最早匹配出“涉H(中)”、“约会涉H(英)”、“论文培训”、“发票”、“广告”、...
  • 计算广告——读书笔记(一)

    千次阅读 多人点赞 2019-04-02 20:38:38
    一、在线广告综述 1. 大数据和广告关系 2. 广告定义和目的 3. 在线广告创意类型 4. 在线广告简史 5. 泛广告商业产品 二、计算广告基础 1. 广告有效性原理 2. 互联网广告的技术特点 3. 计算广告的核心问题 ...
  • 计算广告读书笔记

    千次阅读 2021-09-22 21:56:54
    1.2广告分类 (1)横幅广告 (2)文字链广告,一般是搜索广告的主流形式,连接到广告主的落地页 (3)富媒体广告,利用视觉冲击力,向用户投送广告素材,比如弹窗,对联,全屏,对用户的使用体验影响很大。 (4...
  • 用了以ecshop为内核的小京东5.0,在设置首页楼层分类的时候,是不是发现这样一个怪象:在后台模板设置里修改了楼层的分类后发现这个楼层左侧的广告不见了!代而显示的是一张“暂无广告”的图片!这是怎么回事?修改...
  • RTB--Real TimeBidding模式的互联网广告(实时竞价的广告投放) ...竞价成功后获得广告展示机会,在展示位置上展示广告。 其内部先根据展示位(SSP)的价格估计,实时发出展示请求,买方(DSP)实时竞拍出价,...
  • 商家招牌的分类与检测

    千次阅读 2018-07-30 01:53:18
    将最终的分类结果上传到比赛平台。  数据典型图像  a.样本类别多样性        b.每类样本数据多样化 思路:初赛难度不大,通过简单的数据增强,将图像经过ResNet50提取特征,经过FC+softmax或者SVM就...
  • 广告效果聚类分析(KMeans)

    千次阅读 2019-05-05 18:50:47
    前段时间做了一个项目,该客户是来自教育行业,其主要的宣传获客手段就是在各个渠道投放广告,用广告将用户引流至网站。 但是广告的渠道非常多,哪些渠道效果很好,哪些效果不好。需要对广告效果分析针对性做广告...
  • 计算广告小窥[下]要啥自行车!

    千次阅读 2016-08-26 22:58:18
    一是总结自己已掌握的知识,二是降低同学们的学习成本。本人能力有限,更缺乏实践经验,文章内容多为书籍和论文的读后感,若有不当或者...在此,向编写《计算广告》的刘鹏和王超两位老师致谢,向各位paper作者致谢。
  • 信息流广告投放分析实战案例!

    千次阅读 2021-04-07 00:49:25
    大家好,我是小z今天给大家分享一篇信息流广告投放的干货~随着互联网人口红利的消失,各大互联网产品都争先恐后开始做用户增长,希望以最低的成本拉新促活更多用户。用户增长的策略和手段有很多,其中...
  • 7、根据需要设置完之后,可以拖动格子叨需要的位置,并调整格子大小,完成之后,在每个格子左上角有一个小锁,这个事锁定键,点击之后,可以发现小锁已经锁上,此时这个格子已经锁定,不能拖动更改其位置和大小了。...
  • 原因很简单,作为一个资历尚浅的研究生,是没有资格对计算广告这样一个伟大的行业、领域和学科来评头论足的。之所以这么做,一是总结自己已掌握的知识,二是降低同学们的学习成本。本人能力有限,更缺乏实践经验,...
  • 前言很早以前写过一篇自定义广告控件的文章,这篇文章也是自定义广告控件,不同的是内部包含的是列表,具体看效果图:使用方式<?xml version="1.0" encoding="utf-8"?> <RelativeLa
  • 计算广告——读书笔记(二)

    千次阅读 2019-04-05 18:56:29
    在计算广告——读书笔记(一)中,主要从产品角度介绍,而本篇从技术角度,继续介绍广告业务。 一、计算广告技术概述 1. 个性化系统框架 一般个性化系统由四部分组成:用于实时响应请求,完成决策的在线投放(on...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,242
精华内容 12,896
热门标签
关键字:

常用的位置广告分类