概述

模型概念

波士顿矩阵(BCG Matrix),又称市场增长率--相对市场份额矩阵、波士顿咨询集团法、四象限分析法、产品系列结构管理法等,由美国著名的管理学家、波士顿咨询公司创始人布鲁斯·亨德森于 1970 年创作。

波士顿矩阵认为一般决定产品结构的基本因素有两个:即市场引力企业实力,通过销售增长率(反映市场引力的指标)和市场份额(反映企业实力的指标)来分析决定企业的产品结构。

  • 市场引力:包括整个市场的销售量(额)增长率、竞争对手强弱及利润高低等。其中最主要的是反映市场引力的综合指标--销售增长率,这是决定企业产品结构是否合理的外在因素。
  • 企业实力:包括市场份额,技术、设备、资金利用能力等,其中市场份额是决定企业产品结构的内在要素,它直接显示出企业竞争实力。销售增长率与市场份额既相互影响,又互为条件:市场引力大,市场占有高,可以显示产品发展的良好前景,企业也具备相应的适应能力,实力较强;如果仅有市场引力大,而没有相应的高市场份额,则说明企业尚无足够实力,则该种产品也无法顺利发展。相反,企业实力强,而市场引力小的产品也预示了该产品的市场前景不佳。

通过以上两个因素相互作用,会出现四种不同性质的产品类型,形成不同的产品发展前景:

  • 明星类产品:销售增长率和市场份额“双高”的产品群;
  • 瘦狗类产品:销售增长率和市场份额“双低”的产品群;
  • 问题类产品:销售增长率高、市场份额低的产品群;
  • 金牛类产品:销售增长率低、市场份额高的产品群。

应用意义

波士顿矩阵对于企业产品所处的四个象限具有不同的定义和相应的战略对策。

  • 明星类业务(Stars,指高增长、高市场份额)

    这个领域中的产品处于快速增长的市场中并且占有支配地位份额。但也许不会产生正现金流量。但因为市场还在高速成业必须继续投资,以保持与市场同步增长,并击退竞争对手。

  • 问题类业务(Question Marks,指高增长、低市场份额)

    处在这个领域中的是一些投机性产品。这些产品可能利润率但占有的市场份额很小。公司必须慎重回答“是否继续投资.业务?”这个问题。只有那些符合企业发展长远目标、企业具优势、能够增强企业核心竞争力的业务才得到肯定的回答。

  • 瘦狗型业务(Dogs,指低增长、低市场份额)

    这个剩下的领域中的产品既不能产生大量的现金,也不需要投入大量现金,这些产品没有希望改进其绩效。瘦狗型业务通常要占用很多资源。多数时候是得不偿失的。

  • 金牛类业务(Cash Cows,指低增长、高市场份额)

    处在这个领域中的产品产生大量的现金。但未来的增长前景是有限的。由于市场已经成熟。企业不必大量投资来扩展市场规模.同时作为市场中的领导者。该业务享有规模经济和高边际利润的优势,因而给企业带来大量现金流。

充分了解了四种业务的特点后还须进一步明确各项业务单位在公司中的不同地位,从而进一步明确其战略目标。通常有四种战略目标分别适用于不同的业务。

  • 发展:以提高经营单位的相对市场份额为目标,甚至不惜放弃短期收益。要使问题类业务想尽快成为“明星”,就要增加资金投入。
  • 稳定;投资维持现状,目标是保持业务单位现有的市场份额、对于较大的“金牛”可以此为目标,以使它们产生更多的收益。
  • 收缩:这种战略主要是为了获得短期收益,目标是在短期内尽可能地得到最大限度的现金收入。对处境不佳的金牛类业务及没有发展前途的问题类业务和瘦狗类业务应视具体情况采取这种策略。
  • 放弃:目标在于清理和撤销某些业务,减轻负担,以便将有限的资源用于效益较高的业务。这种目标适用于无利可图的瘦狗类和问题类业务。一个公司必须对其业务加以调整,以使其投资组合趋于合理。

实战

基础数据

这里选择 2019 年某一周苹果商店应用榜单排名的数据进行分析,数据字段为:

  • appid:应用 ID
  • date:日期(2019-11-30 -- 2019-12-06)
  • category:应用类别
  • feed:榜单类型(free--免费,paid--付费,grossing--畅销)
  • name:应用名称
  • publisher:应用发行商
  • price:应用价格
  • ranking:应用排名
  • change:应用排名变化(今日排名-昨日排名)
  • sub_ranking:应用类型榜单排名
  • sub_change:应用类型榜单排名变化(今日排名-昨日排名)
  • comment_rating:应用评分
  • comment_num:评论数量
  • keyword_cover:关键词封面

部分数据如下:

appiddatecategoryfeednamepublisherpricerankingchangesub_rankingsub_changecomment_ratingcomment_numkeyword_cover
6918284082019-11-305000free微视-短视频创作与分享Tencent Technology (Beijing) Company Limited0.00112154.512400017503
14580726712019-11-305000free剪映 - 轻而易剪深圳市脸萌科技有限公司0.002-12-14.963200019978
14483276062019-11-305000free刷宝短视频成都力奥文化传播有限公司0.003-13-14.85990006759
14725028192019-11-305000free快手极速版华艺汇龙0.004-14-14.922800038549
11421108952019-11-305000free抖音短视频Beijing Microlive Vision Technology Co., Ltd0.005-15-14.92387000021441
14684542002019-11-305000free番茄小说-原红果小说Beijing Zhending Technology Co., Ltd.0.006-1104.818300016171

数据下载地址:apple store ranks 2019

数据处理

由于数据较多,下面只选取分类为 5000、榜单类型为 free、排名 ranking100 以内的应用排名数据,以七天的平均评论数占比 AVG(comment_num/SUM(comment_num)) 作为市场份额计算市场份额占比,以七天平均评论数增长率 (end_ranking/start_ranking)^-6 - 1 计算销售增长率(这里没有类似每日安装数量的数据字段,如果有可以使用):

  1. 获取每日免费榜单前 100 的应用,查到部分日期有重复数据,这里按应用名称和日期聚合,取最高排名和最大评论数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    WITH t1 AS (
    SELECT
    "appid",
    "name",
    "date",
    MIN ( "ranking" ) AS "ranking",
    MAX ( "comment_num" ) "comment_num"
    FROM
    "bcg_matrix"
    WHERE
    "feed" = 'free'
    AND "category" = '5000'
    AND "ranking" <= 100
    GROUP BY
    "appid",
    "name",
    "date"
    )

  2. 使用 EXISTS 筛选出七天都在榜单的应用,计算第一天的排名、最后一天的排名、每日评论份额占比。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
    "appid",
    "name",
    "date",
    FIRST_VALUE ( "ranking" ) OVER ( PARTITION BY "appid", "name" ORDER BY "date" ) AS "start_ranking",
    FIRST_VALUE ( "ranking" ) OVER ( PARTITION BY "appid", "name" ORDER BY "date" DESC ) AS "end_ranking",
    "comment_num" / SUM ( "comment_num" ) OVER ( PARTITION BY "date" ) AS "comment_ratio" -- 每日份额占比=评论数/评论总数
    FROM
    t1
    WHERE
    EXISTS ( -- 七天都在榜单上
    SELECT "appid" FROM t1 AS t2 WHERE t1.appid = t2.appid GROUP BY "appid" HAVING COUNT ( 1 ) = 7 )

  3. 计算七天平均增长率和七天平均评论份额占比。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    "appid",
    "name",
    ROUND( ( POWER ( "end_ranking" / "start_ranking", 1.0 / 6 ) - 1 ) * 100, 4 ) AS "change_ratio",-- 七天平均增长率,注意要用 1.0/6 而不能用 1/6
    ROUND( AVG ( "comment_ratio" ) * 100, 4 ) AS "comment_ratio" -- 评论占比
    FROM
    (...) t3
    GROUP BY
    "appid",
    "name",
    "change_ratio"

  4. 对应用进行分类,这里以 change_ratio = 0AVG(comment_ratio) 为分割线将应用分为四类。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    *,
    CASE
    WHEN "change_ratio" >= 0 AND "comment_ratio" > AVG ( "comment_ratio" ) OVER ( ) THEN '明星'
    WHEN "change_ratio" >= 0 AND "comment_ratio" < AVG ( "comment_ratio" ) OVER ( ) THEN '问题'
    WHEN "change_ratio" < 0 AND "comment_ratio" > AVG ( "comment_ratio" ) OVER ( ) THEN '金牛'
    WHEN "change_ratio" < 0 AND "comment_ratio" < AVG ( "comment_ratio" ) OVER ( ) THEN '瘦狗'
    END AS "cls"
    FROM (...) t4
    ORDER BY
    "comment_ratio" DESC

完整 SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
WITH t1 AS (
SELECT
"appid",
"name",
"date",
MIN ( "ranking" ) AS "ranking",
MAX ( "comment_num" ) "comment_num"
FROM
"bcg_matrix"
WHERE
"feed" = 'free'
AND "category" = '5000'
AND "ranking" <= 100
GROUP BY
"appid",
"name",
"date"
)
SELECT
*,
CASE
WHEN "change_ratio" >= 0 AND "comment_ratio" > AVG ( "comment_ratio" ) OVER ( ) THEN '明星'
WHEN "change_ratio" >= 0 AND "comment_ratio" < AVG ( "comment_ratio" ) OVER ( ) THEN '问题'
WHEN "change_ratio" < 0 AND "comment_ratio" > AVG ( "comment_ratio" ) OVER ( ) THEN '金牛'
WHEN "change_ratio" < 0 AND "comment_ratio" < AVG ( "comment_ratio" ) OVER ( ) THEN '瘦狗'
END AS "cls"
FROM
(
SELECT
"appid",
"name",
ROUND( ( POWER ( "end_ranking" / "start_ranking", 1.0 / 6 ) - 1 ) * 100, 4 ) AS "change_ratio",-- 七天平均增长率,注意要用 1.0/6 而不能用 1/6
ROUND( AVG ( "comment_ratio" ) * 100, 4 ) AS "comment_ratio" -- 评论占比
FROM
(
SELECT
"appid",
"name",
"date",
FIRST_VALUE ( "ranking" ) OVER ( PARTITION BY "appid", "name" ORDER BY "date" ) AS "start_ranking",
FIRST_VALUE ( "ranking" ) OVER ( PARTITION BY "appid", "name" ORDER BY "date" DESC ) AS "end_ranking",
"comment_num" / SUM ( "comment_num" ) OVER ( PARTITION BY "date" ) AS "comment_ratio" -- 每日份额占比=评论数/评论总数
FROM
t1
WHERE
EXISTS ( -- 七天都在榜单上
SELECT "appid" FROM t1 AS t2 WHERE t1.appid = t2.appid GROUP BY "appid" HAVING COUNT ( 1 ) = 7 )
) t3
GROUP BY
"appid",
"name",
"change_ratio"
) t4
ORDER BY
"comment_ratio" DESC

输出数据

appidnamechange_ratiocomment_ratiocls
1142110895抖音短视频0.055815.4006明星
393765873爱奇艺-奇葩说6独播0.12488.6023明星
458318329腾讯视频-从前有座灵剑山热播0.06428.3566金牛
461703208高德地图-精准地图,导航出行必备0.09228.1495明星
336141475优酷视频-鹤唳华亭精彩呈现0.19307.2290明星
507161324饿了么-外卖订餐,30分钟准时送达0.06714.8019明星

数据可视化

波士顿矩阵图