<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on This Is Marshal</title>
        <link>https://www.marshalgao.com/posts/</link>
        <description>Recent content in Posts on This Is Marshal</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright>
        <lastBuildDate>Fri, 23 Aug 2024 16:14:56 +0800</lastBuildDate>
        <atom:link href="https://www.marshalgao.com/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>What Are Inverted Index and Boolean Retrieval?</title>
            <link>https://www.marshalgao.com/what-are-inverted-index-and-boolean-retrieval/</link>
            <pubDate>Fri, 23 Aug 2024 16:14:56 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/what-are-inverted-index-and-boolean-retrieval/</guid>
            <description>After being a search produt manager for a period of time, I frequently heard technical terms such as inverted index and boolean retrieval. Out of curiosity, I went to thoroughly learn about them.
Jumping out of the search engine, the so-called index is use a keyword to search and match from the beginning of the document until the corresponding query word is found. This method is logically simple, essentially brute-force disassembly, or exhaustive.</description>
            <content type="html"><![CDATA[<p>After being a search produt manager for a period of time, I frequently heard technical terms such as inverted index and boolean retrieval. Out of curiosity, I went to thoroughly learn about them.</p>
<p>Jumping out of the search engine, the so-called index is use a keyword to search and match from the beginning of the document until the corresponding query word is found. This method is logically simple, essentially brute-force disassembly, or exhaustive. However, it brings disadvantages. If the text is sufficient and long enough, then the idexing time will be very long and the efficiency is not high. But searching is a scene where the need is met in real time, and if the speed is too slow, the ueser experience will deteriorate.</p>
<p>And the inverted idex is like looking up a dictionary. First, find the corresponding word according to the first letter, and then turn to the corresponding page for fine-grained query. The reason why this can be done is that the directory of the dictionary has been classified according to the first letter. For example, if you want to query &lsquo;Apple&rsquo;, then you will go to the classifcation starting with &lsquo;A&rsquo; to find &lsquo;Apple&rsquo;.</p>
<p>In a search engine, each result (i.e., document) will be cut into multiple words (i.e., word segmentation), and the words cut out from different documents will most likely repeated, so earch segmented word will be assoicated with multiple documents. One segmented word can estabilsh a connection with multiple documents, and this process is indexing. Returning to the above example, in the documents that contain &lsquo;Apple&rsquo; afer word segmentation, an index established by &lsquo;Apple&rsquo; will be formed, just like the directory in a dictionary. When a user searches for &lsquo;Apple&rsquo;, all the documents with &lsquo;Apple&rsquo; will be quickly found.</p>
<p><img src="../pictures/article_apple_case.png" alt=""></p>
<p>But when a user searches for &lsquo;Apple Store&rsquo;, in theory, only the text containing &lsquo;Apple Store&rsquo; should be retrieved. In the above example, &lsquo;Apple is &hellip;&rsquo; and &lsquo;Apple has &hellip;&rsquo; should not be retrieved. How to achieve such a matching mechanism? The answer is boolean retrieval.</p>
<p>There are three important judgment logics in boolean retrieval, which are AND (intersection), OR (union), and NOT (difference). After the user enters keywords, they will be split into multiple word segments, and these three logics will be used for matching and retrieval between multiple word segments, and only the results that meet the conditions will be retrieved. Then continue to use the above example to explain. When a user searches for &lsquo;Apple Store&rsquo;, this query will be cut into two words, &lsquo;Apple&rsquo; and &lsquo;Store&rsquo;. &lsquo;Apple&rsquo; can be retrieve the text &lsquo;Apple is &hellip;&rsquo;, &lsquo;Apple Store &hellip;&rsquo;, and &lsquo;Apple has &hellip;&rsquo;. &lsquo;Store&rsquo; can retrieve &lsquo;Apple Store &hellip;&rsquo;. We assume that complete inclusion is required here, then the boolean operation that needs to be performed in AND, and the intersection of the retrievable texts of &lsquo;Apple&rsquo; and &lsquo;Store&rsquo; is taken, and finally &lsquo;Apple Store &hellip;&rsquo; is retrieved.</p>
<p>So are OR or NOT useless? Of course not. For example, if you want to expand the retrieval, then in the above case, OR operation can be performed to retrieve all the texts. However, the relevance between the text and query will also become worse. Of course, this is just for easy understanding, and it may not be used like this in actual business.</p>
]]></content>
        </item>
        
        <item>
            <title>Why Did I Start?</title>
            <link>https://www.marshalgao.com/why-did-i-start/</link>
            <pubDate>Fri, 27 Jan 2023 00:09:01 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/why-did-i-start/</guid>
            <description>This article was written on January 9, 2023. I have been working for almost two years. However, I found nothing useful left. For the same title, I wrote one in 2022. The first version was mostly helpless and roast, and I wrote a lot of words at that time, because I really had a lot to say. However, the previous roast was important and precious, and it reflected the thoughts at that time.</description>
            <content type="html"><![CDATA[<p>This article was written on January 9, 2023. I have been working for almost two years. However, I found nothing useful left. For the same title, I wrote one in 2022. The first version was mostly helpless and roast, and I wrote a lot of words at that time, because I really had a lot to say. However, the previous roast was important and precious, and it reflected the thoughts at that time. I just want to keep it, so I will not let you feel my sadness.</p>
<p>At HKU, I was happy every day and learnt a lot of new knowledge, especially Internet commercialization. Of course, it also precipitated a lot. One day, the domain name service provider sent me an email reminding me to renew the fee. I visited my website and found that the lastest article was in 2021. In retrospect, I have not shared my thoughts since my internship. After work, I am pretty busy and I have no input. I may not have lost my ability to learn, but at least, I broke my promise when I left the campus, which was keeping critical thinking. I do not know when I became like this. There is no editing of the video that has been delayed for a long time. At the weekend, only physical energy is consumed, without thinking.</p>
<p>Well, make some changes. I would operate the <a href='https://www.marshalgao.com'>website</a> and WeChat official account (Hey Marshal) seperately. All articles before 2023 would be kept on this website and put into the new zone. The new articles would be written in English on the website for the convenience of guests from all over the world. WeChat official account would only update new articles after 2023, and written them in simplified Chinese, so that people from Mainland China can read them easily. All articles would focus on Internet products, including but not limited to product thinking and algorithmic soultions.</p>
<p>Finally, people from all over the world are welcome to share their perspectives. Website users can contact me through <a href='mailto:kyko@marshalgao.com'>email</a>, and WeChat official account users can contact me by leaving messages.</p>
]]></content>
        </item>
        
        <item>
            <title>Say Goodbye to Chaos</title>
            <link>https://www.marshalgao.com/say-goodbye-to-chaos/</link>
            <pubDate>Sun, 06 Jun 2021 17:25:36 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/say-goodbye-to-chaos/</guid>
            <description>   汽车倒行，转眼间，便早已暂停于车站。我们都曾幻想过两点一线的美好未来，但现实的红色离别与混沌向浑沌的难以逾越，让曾经戛然于现实的影子，只可远看，但不愿回味。站在未来预估现实的未来，我知道未来早已恢复于美好，但也要与这一切挥手道别。
 拖更很久，主要是和朋友们在一起玩得太开心！ 告别了混沌，一个人顶着受伤的jio骑车看了梅窝的风景，也和可爱的人儿去看了山海！ </description>
            <content type="html"><![CDATA[<div class="iframe-container">
    <iframe src="//player.bilibili.com/player.html?aid=930890585&bvid=BV1NK4y1X74Q&cid=349793842&page=1" allowfullscreen> </iframe>
</div>
<hr>
<h5 id="p-alignjustify汽车倒行转眼间便早已暂停于车站我们都曾幻想过两点一线的美好未来但现实的红色离别与混沌向浑沌的难以逾越让曾经戛然于现实的影子只可远看但不愿回味站在未来预估现实的未来我知道未来早已恢复于美好但也要与这一切挥手道别p"><p align="justify">汽车倒行，转眼间，便早已暂停于车站。我们都曾幻想过两点一线的美好未来，但现实的红色离别与混沌向浑沌的难以逾越，让曾经戛然于现实的影子，只可远看，但不愿回味。站在未来预估现实的未来，我知道未来早已恢复于美好，但也要与这一切挥手道别。</p></h5>
<h5 id="拖更很久主要是和朋友们在一起玩得太开心">拖更很久，主要是和朋友们在一起玩得太开心！</h5>
<h5 id="告别了混沌一个人顶着受伤的jio骑车看了梅窝的风景也和可爱的人儿去看了山海">告别了混沌，一个人顶着受伤的jio骑车看了梅窝的风景，也和可爱的人儿去看了山海！</h5>
]]></content>
        </item>
        
        <item>
            <title>Basic Usage of R Language</title>
            <link>https://www.marshalgao.com/basic-usage-of-r-language/</link>
            <pubDate>Mon, 01 Feb 2021 12:17:11 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/basic-usage-of-r-language/</guid>
            <description>Installation R
 download from official website -&amp;gt; click here choose the mirror to download according your location and OS  RStudio
 ensure that you have installed R before installing RSudio download RStudio desktop from official website -&amp;gt; click here  Notebook
 can use RStudio also can use Kaggle  Basic Functions and Usage of R Language  practice in Kaggle  </description>
            <content type="html"><![CDATA[<h2 id="installation">Installation</h2>
<p><strong>R</strong></p>
<ul>
<li>download from official website -&gt; <a href="https://cran.r-project.org/mirrors.html">click here</a></li>
<li>choose the mirror to download according your location and OS</li>
</ul>
<p><strong>RStudio</strong></p>
<ul>
<li>ensure that you have installed R before installing RSudio</li>
<li>download RStudio desktop from official website -&gt; <a href="https://rstudio.com/products/rstudio/">click here</a></li>
</ul>
<p><strong>Notebook</strong></p>
<ul>
<li>can use RStudio</li>
<li>also can use Kaggle</li>
</ul>
<h2 id="basic-functions-and-usage-of-r-language">Basic Functions and Usage of R Language</h2>
<ul>
<li><a href="https://www.kaggle.com/marshalgao/r-basic-usage">practice in Kaggle</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Study With Marshal</title>
            <link>https://www.marshalgao.com/study-with-marshal/</link>
            <pubDate>Sat, 16 Jan 2021 22:12:02 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/study-with-marshal/</guid>
            <description>   开学的已经开学，放假的也开始放假了，但是大家都要继续学习呀！ 给大家安利超赞的8小时学习法，每个小时分为 50 mins learning + 10 mins break！（视频放8次就好啦） 我们一起看海，听着Marshal最爱的白噪声，翻来覆去。。。的学习！！！ </description>
            <content type="html"><![CDATA[<div class="iframe-container">
    <iframe src="//player.bilibili.com/player.html?aid=203738034&bvid=BV1ph411y7A3&cid=283319057&page=1" allowfullscreen> </iframe>
</div>
<hr>
<h5 id="开学的已经开学放假的也开始放假了但是大家都要继续学习呀">开学的已经开学，放假的也开始放假了，但是大家都要继续学习呀！</h5>
<h5 id="给大家安利超赞的8小时学习法每个小时分为-50-mins-learning--10-mins-break视频放8次就好啦">给大家安利超赞的8小时学习法，每个小时分为 50 mins learning + 10 mins break！（视频放8次就好啦）</h5>
<h5 id="我们一起看海听着marshal最爱的白噪声翻来覆去的学习">我们一起看海，听着Marshal最爱的白噪声，翻来覆去。。。的学习！！！</h5>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[1179] Reformat Department Table</title>
            <link>https://www.marshalgao.com/leetcode1179-reformat-department-table/</link>
            <pubDate>Thu, 14 Jan 2021 15:51:59 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode1179-reformat-department-table/</guid>
            <description>Question Table: Department
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | revenue | int | | month | varchar | +---------------+---------+ (id, month) is the primary key of this table. The table has information about the revenue of each department per month. The month has values in [&amp;quot;Jan&amp;quot;,&amp;quot;Feb&amp;quot;,&amp;quot;Mar&amp;quot;,&amp;quot;Apr&amp;quot;,&amp;quot;May&amp;quot;,&amp;quot;Jun&amp;quot;,&amp;quot;Jul&amp;quot;,&amp;quot;Aug&amp;quot;,&amp;quot;Sep&amp;quot;,&amp;quot;Oct&amp;quot;,&amp;quot;Nov&amp;quot;,&amp;quot;Dec&amp;quot;].  Write an SQL query to reformat the table such that there is a department id column and a revenue column for each month.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Table: Department</p>
<pre><code>+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| revenue       | int     |
| month         | varchar |
+---------------+---------+
(id, month) is the primary key of this table.
The table has information about the revenue of each department per month.
The month has values in [&quot;Jan&quot;,&quot;Feb&quot;,&quot;Mar&quot;,&quot;Apr&quot;,&quot;May&quot;,&quot;Jun&quot;,&quot;Jul&quot;,&quot;Aug&quot;,&quot;Sep&quot;,&quot;Oct&quot;,&quot;Nov&quot;,&quot;Dec&quot;].
</code></pre>
<p>Write an SQL query to reformat the table such that there is a department id column and a revenue column <strong>for each month</strong>.</p>
<p>The query result format is in the following example:</p>
<pre><code>Department table:
+------+---------+-------+
| id   | revenue | month |
+------+---------+-------+
| 1    | 8000    | Jan   |
| 2    | 9000    | Jan   |
| 3    | 10000   | Feb   |
| 1    | 7000    | Feb   |
| 1    | 6000    | Mar   |
+------+---------+-------+

Result table:
+------+-------------+-------------+-------------+-----+-------------+
| id   | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |
+------+-------------+-------------+-------------+-----+-------------+
| 1    | 8000        | 7000        | 6000        | ... | null        |
| 2    | 9000        | null        | null        | ... | null        |
| 3    | null        | 10000       | null        | ... | null        |
+------+-------------+-------------+-------------+-----+-------------+
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Department (id int, revenue int, <span style="color:#66d9ef">month</span> varchar(<span style="color:#ae81ff">5</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Department
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (id, revenue, <span style="color:#66d9ef">month</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;8000&#39;</span>, <span style="color:#e6db74">&#39;Jan&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (id, revenue, <span style="color:#66d9ef">month</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;9000&#39;</span>, <span style="color:#e6db74">&#39;Jan&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (id, revenue, <span style="color:#66d9ef">month</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;10000&#39;</span>, <span style="color:#e6db74">&#39;Feb&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (id, revenue, <span style="color:#66d9ef">month</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;7000&#39;</span>, <span style="color:#e6db74">&#39;Feb&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (id, revenue, <span style="color:#66d9ef">month</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;6000&#39;</span>, <span style="color:#e6db74">&#39;Mar&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> id,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Jan&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Jan_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Feb&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Feb_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Mar&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Mar_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Apr&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Apr_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;May&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> May_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Jun&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Jun_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Jul&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Jul_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Aug&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Aug_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Sep&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Sep_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Oct&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Oct_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Nov&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Nov_Revenue,
    <span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> <span style="color:#66d9ef">month</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Dec&#39;</span> <span style="color:#66d9ef">then</span> revenue <span style="color:#66d9ef">end</span>) <span style="color:#66d9ef">as</span> Dec_Revenue
<span style="color:#66d9ef">from</span> Department
<span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> id
<span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> id
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is not pretty simple. You can use &ldquo;order by&rdquo;, &ldquo;group by&rdquo; and &ldquo;case&hellip;when&hellip;&rdquo; to address this problem.</p>
<p>However, due to &ldquo;group by&rdquo;, even if you use &ldquo;case&hellip;when&hellip;&rdquo;, all groups would only select the first element. So how to achieve all elements' selection? You can use some functions, such as &ldquo;avg()&rdquo; and &ldquo;sum()&rdquo;.</p>
<p>Also, there is a useful link, and I think it can help you.</p>
<ul>
<li><a href="https://medium.com/@jan_hkmn/advanced-pivoting-in-sql-the-max-case-trick-50d58869fc96">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[627] Swap Salary</title>
            <link>https://www.marshalgao.com/leetcode627-swap-salary/</link>
            <pubDate>Thu, 14 Jan 2021 15:12:42 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode627-swap-salary/</guid>
            <description>Question Given a table salary, such as the one below, that has m=male and f=female values. Swap all f and m values (i.e., change all f values to m and vice versa) with a single update statement and no intermediate temp table.
Note that you must write a single update statement, DO NOT write any select statement for this problem.
Example:
| id | name | sex | salary | |----|------|-----|--------| | 1 | A | m | 2500 | | 2 | B | f | 1500 | | 3 | C | m | 5500 | | 4 | D | f | 500 |  After running your update statement, the above salary table should have the following rows:</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Given a table salary, such as the one below, that has m=male and f=female values. Swap all f and m values (i.e., change all f values to m and vice versa) with a <strong>single update statement</strong> and no intermediate temp table.</p>
<p>Note that you must write a single update statement, <strong>DO NOT</strong> write any select statement for this problem.</p>
<p><strong>Example</strong>:</p>
<pre><code>| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | m   | 2500   |
| 2  | B    | f   | 1500   |
| 3  | C    | m   | 5500   |
| 4  | D    | f   | 500    |
</code></pre>
<p>After running your <strong>update</strong> statement, the above salary table should have the following rows:</p>
<pre><code>| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | f   | 2500   |
| 2  | B    | m   | 1500   |
| 3  | C    | f   | 5500   |
| 4  | D    | m   | 500    |
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">if</span> <span style="color:#66d9ef">not</span> <span style="color:#66d9ef">exists</span> salary(id int, name varchar(<span style="color:#ae81ff">100</span>), sex char(<span style="color:#ae81ff">1</span>), salary int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> salary
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> salary (id, name, sex, salary) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;A&#39;</span>, <span style="color:#e6db74">&#39;m&#39;</span>, <span style="color:#e6db74">&#39;2500&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> salary (id, name, sex, salary) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;B&#39;</span>, <span style="color:#e6db74">&#39;f&#39;</span>, <span style="color:#e6db74">&#39;1500&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> salary (id, name, sex, salary) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;C&#39;</span>, <span style="color:#e6db74">&#39;m&#39;</span>, <span style="color:#e6db74">&#39;5500&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> salary (id, name, sex, salary) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;D&#39;</span>, <span style="color:#e6db74">&#39;f&#39;</span>, <span style="color:#e6db74">&#39;500&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">update</span> salary
<span style="color:#66d9ef">set</span> sex <span style="color:#f92672">=</span> 
<span style="color:#66d9ef">case</span>
    <span style="color:#66d9ef">when</span> sex <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;m&#39;</span> <span style="color:#66d9ef">then</span> <span style="color:#e6db74">&#39;f&#39;</span>
    <span style="color:#66d9ef">when</span> sex <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;f&#39;</span> <span style="color:#66d9ef">then</span> <span style="color:#e6db74">&#39;m&#39;</span>
    <span style="color:#66d9ef">else</span> sex
    <span style="color:#66d9ef">end</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is simple, and you can use &ldquo;update&rdquo; and &ldquo;case&hellip;when&hellip;&rdquo; to address.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://blog.csdn.net/nextaction/article/details/80453843">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[626] Exchange Seats</title>
            <link>https://www.marshalgao.com/leetcode626-exchange-seats/</link>
            <pubDate>Thu, 14 Jan 2021 14:50:32 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode626-exchange-seats/</guid>
            <description>Question Mary is a teacher in a middle school and she has a table seat storing students&#39; names and their corresponding seat ids.
The column id is continuous increment.
Mary wants to change seats for the adjacent students.
Can you write a SQL query to output the result for Mary?
+---------+---------+ | id | student | +---------+---------+ | 1 | Abbot | | 2 | Doris | | 3 | Emerson | | 4 | Green | | 5 | Jeames | +---------+---------+  For the sample input, the output is:</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Mary is a teacher in a middle school and she has a table seat storing students' names and their corresponding seat ids.</p>
<p>The column <strong>id</strong> is continuous increment.</p>
<p>Mary wants to change seats for the adjacent students.</p>
<p>Can you write a SQL query to output the result for Mary?</p>
<pre><code>+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |   
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+
</code></pre>
<p>For the sample input, the output is:</p>
<pre><code>+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+
</code></pre>
<p><strong>Note</strong>:</p>
<p>If the number of students is odd, there is no need to change the last one&rsquo;s seat.</p>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> seat(id int, student varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> seat
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> seat (id, student) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;Abbot&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> seat (id, student) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Doris&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> seat (id, student) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;Emerson&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> seat (id, student) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;Green&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> seat (id, student) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;Jeames&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> <span style="color:#66d9ef">case</span>
    <span style="color:#66d9ef">when</span> id <span style="color:#f92672">%</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#66d9ef">then</span> id <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span>
    <span style="color:#66d9ef">when</span> id <span style="color:#f92672">%</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> <span style="color:#66d9ef">and</span> id <span style="color:#f92672">!=</span> (<span style="color:#66d9ef">select</span> <span style="color:#66d9ef">max</span>(id) <span style="color:#66d9ef">from</span> seat) <span style="color:#66d9ef">then</span> id <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>
    <span style="color:#66d9ef">else</span> id
    <span style="color:#66d9ef">end</span> <span style="color:#66d9ef">as</span> id,
    student
<span style="color:#66d9ef">from</span> seat
<span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> id
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is simple, and you just use &ldquo;case&rdquo;, like &ldquo;if&hellip;else&rdquo;, to accomplish this question.</p>
<p>However, I had a problem when doing this question. Initially, I used &ldquo;id != max(id)&rdquo; to judge, and the result was null because this method means no selection. Finally, I use current phrase to use &ldquo;max(id)&rdquo; is ok.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/telescope11/p/9909757.html">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[620] Not Boring Movies</title>
            <link>https://www.marshalgao.com/leetcode620-not-boring-movies/</link>
            <pubDate>Thu, 14 Jan 2021 13:47:00 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode620-not-boring-movies/</guid>
            <description>Question X city opened a new cinema, many people would like to go to this cinema. The cinema also gives out a poster indicating the movies’ ratings and descriptions.
Please write a SQL query to output movies with an odd numbered ID and a description that is not &amp;lsquo;boring&amp;rsquo;. Order the result by rating.
For example, table cinema:
+---------+-----------+--------------+-----------+ | id | movie | description | rating | +---------+-----------+--------------+-----------+ | 1 | War | great 3D | 8.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>X city opened a new cinema, many people would like to go to this cinema. The cinema also gives out a poster indicating the movies’ ratings and descriptions.</p>
<p>Please write a SQL query to output movies with an odd numbered ID and a description that is not &lsquo;boring&rsquo;. Order the result by rating.</p>
<p>For example, table cinema:</p>
<pre><code>+---------+-----------+--------------+-----------+
|   id    | movie     |  description |  rating   |
+---------+-----------+--------------+-----------+
|   1     | War       |   great 3D   |   8.9     |
|   2     | Science   |   fiction    |   8.5     |
|   3     | irish     |   boring     |   6.2     |
|   4     | Ice song  |   Fantacy    |   8.6     |
|   5     | House card|   Interesting|   9.1     |
+---------+-----------+--------------+-----------+
</code></pre>
<p>For the example above, the output should be:</p>
<pre><code>+---------+-----------+--------------+-----------+
|   id    | movie     |  description |  rating   |
+---------+-----------+--------------+-----------+
|   5     | House card|   Interesting|   9.1     |
|   1     | War       |   great 3D   |   8.9     |
+---------+-----------+--------------+-----------+
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> cinema (id int, movie varchar(<span style="color:#ae81ff">255</span>), description varchar(<span style="color:#ae81ff">255</span>), rating float(<span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">1</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> cinema
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> cinema (id, movie, description, rating) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;War&#39;</span>, <span style="color:#e6db74">&#39;great 3D&#39;</span>, <span style="color:#e6db74">&#39;8.9&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> cinema (id, movie, description, rating) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Science&#39;</span>, <span style="color:#e6db74">&#39;fiction&#39;</span>, <span style="color:#e6db74">&#39;8.5&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> cinema (id, movie, description, rating) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;irish&#39;</span>, <span style="color:#e6db74">&#39;boring&#39;</span>, <span style="color:#e6db74">&#39;6.2&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> cinema (id, movie, description, rating) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;Ice song&#39;</span>, <span style="color:#e6db74">&#39;Fantacy&#39;</span>, <span style="color:#e6db74">&#39;8.6&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> cinema (id, movie, description, rating) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;House card&#39;</span>, <span style="color:#e6db74">&#39;Interesting&#39;</span>, <span style="color:#e6db74">&#39;9.1&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span>
<span style="color:#66d9ef">from</span> cinema
<span style="color:#66d9ef">where</span> id <span style="color:#f92672">%</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">!=</span> <span style="color:#ae81ff">0</span> <span style="color:#66d9ef">and</span> description <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#39;boring&#39;</span>
<span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> rating <span style="color:#66d9ef">desc</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is extremely simple. You just add some criterions to &ldquo;id&rdquo; and &ldquo;description&rdquo;, which should be order by rating.</p>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[601] Human Traffic of Stadium</title>
            <link>https://www.marshalgao.com/leetcode601-human-traffic-of-stadium/</link>
            <pubDate>Thu, 14 Jan 2021 13:31:17 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode601-human-traffic-of-stadium/</guid>
            <description>Question Table: Stadium
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | visit_date | date | | people | int | +---------------+---------+ visit_date is the primary key for this table. Each row of this table contains the visit date and visit id to the stadium with the number of people during the visit. No two rows will have the same visit_date, and as the id increases, the dates increase as well.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Table: Stadium</p>
<pre><code>+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| visit_date    | date    |
| people        | int     |
+---------------+---------+
visit_date is the primary key for this table.
Each row of this table contains the visit date and visit id to the stadium with the number of people during the visit.
No two rows will have the same visit_date, and as the id increases, the dates increase as well.
</code></pre>
<p>Write an SQL query to display the records with three or more rows with <strong>consecutive</strong> id&rsquo;s, and the number of people is greater than or equal to 100 for each.</p>
<p>Return the result table ordered by visit_date in <strong>ascending order</strong>.</p>
<p>The query result format is in the following example.</p>
<pre><code>Stadium table:
+------+------------+-----------+
| id   | visit_date | people    |
+------+------------+-----------+
| 1    | 2017-01-01 | 10        |
| 2    | 2017-01-02 | 109       |
| 3    | 2017-01-03 | 150       |
| 4    | 2017-01-04 | 99        |
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-09 | 188       |
+------+------------+-----------+

Result table:
+------+------------+-----------+
| id   | visit_date | people    |   
+------+------------+-----------+
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-09 | 188       |
+------+------------+-----------+
The four rows with ids 5, 6, 7, and 8 have consecutive ids and each of them has &gt;= 100 people attended. Note that row 8 was included even though the visit_date was not the next day after row 7.
The rows with ids 2 and 3 are not included because we need at least three consecutive ids.
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> stadium (id int, visit_date DATE <span style="color:#66d9ef">NULL</span>, people int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> stadium
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;2017-01-01&#39;</span>, <span style="color:#e6db74">&#39;10&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;2017-01-02&#39;</span>, <span style="color:#e6db74">&#39;109&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;2017-01-03&#39;</span>, <span style="color:#e6db74">&#39;150&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;2017-01-04&#39;</span>, <span style="color:#e6db74">&#39;99&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;2017-01-05&#39;</span>, <span style="color:#e6db74">&#39;145&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;2017-01-06&#39;</span>, <span style="color:#e6db74">&#39;1455&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;7&#39;</span>, <span style="color:#e6db74">&#39;2017-01-07&#39;</span>, <span style="color:#e6db74">&#39;199&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> stadium (id, visit_date, people) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;8&#39;</span>, <span style="color:#e6db74">&#39;2017-01-09&#39;</span>, <span style="color:#e6db74">&#39;188&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">with</span> temp <span style="color:#66d9ef">as</span> (
    <span style="color:#66d9ef">select</span> id, visit_date, people
    <span style="color:#66d9ef">from</span> (
        <span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span>,
            lag(id) over(<span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> visit_date) <span style="color:#66d9ef">as</span> preId,
            lead(id) over(<span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> visit_date) <span style="color:#66d9ef">as</span> nextId
        <span style="color:#66d9ef">from</span> Stadium
        <span style="color:#66d9ef">where</span> people <span style="color:#f92672">&gt;=</span> <span style="color:#ae81ff">100</span>
    ) temp1
    <span style="color:#66d9ef">where</span> id <span style="color:#f92672">=</span> preId <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span> <span style="color:#66d9ef">and</span> id <span style="color:#f92672">=</span> nextId <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span>
)

<span style="color:#66d9ef">select</span> Stadium.id, Stadium.visit_date, Stadium.people
<span style="color:#66d9ef">from</span> Stadium, temp
<span style="color:#66d9ef">where</span> Stadium.id <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">=</span> temp.id <span style="color:#66d9ef">or</span> Stadium.id <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">=</span> temp.id
<span style="color:#66d9ef">union</span>
<span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span>
<span style="color:#66d9ef">from</span> temp
<span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span>(id)
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is not difficult but complex. Firstly, you can find consecutive &ldquo;ids&rdquo;, which the people&rsquo;s numbers are larger than or equal to 100 for each. In this question, I use &ldquo;with&hellip;as&hellip;&rdquo; to make this table become a variable called &ldquo;temp&rdquo;, which can be used in all the selections. Then, find the first and the last elements, combining the &ldquo;temp&rdquo;. More importantly, you should use &ldquo;union&rdquo; to connect two tables and use &ldquo;order by()&rdquo; to satisfy the demand of this question.</p>
<p>Also, there are four useful links, and I think they can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/beautifuldata/p/3204294.html">useful link 1</a></li>
<li><a href="https://blog.csdn.net/weixin_41600552/article/details/82958942">useful link 2</a></li>
<li><a href="https://www.w3school.com.cn/sql/sql_union.asp">useful link 3</a></li>
<li><a href="https://www.cnblogs.com/kakaisgood/p/11102704.html">useful link 4</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[596] Classes More Than 5 Students</title>
            <link>https://www.marshalgao.com/leetcode596-classes-more-than-5-students/</link>
            <pubDate>Wed, 13 Jan 2021 15:10:29 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode596-classes-more-than-5-students/</guid>
            <description>Question There is a table courses with columns: student and class
Please list out all classes which have more than or equal to 5 students.
For example, the table:
+---------+------------+ | student | class | +---------+------------+ | A | Math | | B | English | | C | Math | | D | Biology | | E | Math | | F | Computer | | G | Math | | H | Math | | I | Math | +---------+------------+  Should output:</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>There is a table courses with columns: <strong>student</strong> and <strong>class</strong></p>
<p>Please list out all classes which have more than or equal to 5 students.</p>
<p>For example, the table:</p>
<pre><code>+---------+------------+
| student | class      |
+---------+------------+
| A       | Math       |
| B       | English    |
| C       | Math       |
| D       | Biology    |
| E       | Math       |
| F       | Computer   |
| G       | Math       |
| H       | Math       |
| I       | Math       |
+---------+------------+
</code></pre>
<p>Should output:</p>
<pre><code>+---------+
| class   |
+---------+
| Math    |
+---------+
</code></pre>
<p><strong>Note</strong>:</p>
<p>The students should not be counted duplicate in each course.</p>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> courses (student varchar(<span style="color:#ae81ff">255</span>), <span style="color:#66d9ef">class</span> varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> courses
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;A&#39;</span>, <span style="color:#e6db74">&#39;Math&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;B&#39;</span>, <span style="color:#e6db74">&#39;English&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;C&#39;</span>, <span style="color:#e6db74">&#39;Math&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;D&#39;</span>, <span style="color:#e6db74">&#39;Biology&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;E&#39;</span>, <span style="color:#e6db74">&#39;Math&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;F&#39;</span>, <span style="color:#e6db74">&#39;Computer&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;G&#39;</span>, <span style="color:#e6db74">&#39;Math&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;H&#39;</span>, <span style="color:#e6db74">&#39;Math&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> courses (student, <span style="color:#66d9ef">class</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;I&#39;</span>, <span style="color:#e6db74">&#39;Math&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> <span style="color:#66d9ef">class</span>
<span style="color:#66d9ef">from</span> courses
<span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> <span style="color:#66d9ef">class</span> <span style="color:#66d9ef">having</span> <span style="color:#66d9ef">count</span>(<span style="color:#66d9ef">distinct</span> student) <span style="color:#f92672">&gt;=</span> <span style="color:#ae81ff">5</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is very simple. However, you should consider the redundant students in the same class, using &ldquo;distinct&rdquo;.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://www.w3school.com.cn/sql/sql_func_count.asp">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[595] Big Countries</title>
            <link>https://www.marshalgao.com/leetcode595-big-countries/</link>
            <pubDate>Wed, 13 Jan 2021 15:03:55 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode595-big-countries/</guid>
            <description>Question There is a table World.
+-----------------+------------+------------+--------------+---------------+ | name | continent | area | population | gdp | +-----------------+------------+------------+--------------+---------------+ | Afghanistan | Asia | 652230 | 25500100 | 20343000 | | Albania | Europe | 28748 | 2831741 | 12960000 | | Algeria | Africa | 2381741 | 37100000 | 188681000 | | Andorra | Europe | 468 | 78115 | 3712000 | | Angola | Africa | 1246700 | 20609294 | 100990000 | +-----------------+------------+------------+--------------+---------------+  A country is big if it has an area of bigger than 3 million square km or a population of more than 25 million.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>There is a table World.</p>
<pre><code>+-----------------+------------+------------+--------------+---------------+
| name            | continent  | area       | population   | gdp           |
+-----------------+------------+------------+--------------+---------------+
| Afghanistan     | Asia       | 652230     | 25500100     | 20343000      |
| Albania         | Europe     | 28748      | 2831741      | 12960000      |
| Algeria         | Africa     | 2381741    | 37100000     | 188681000     |
| Andorra         | Europe     | 468        | 78115        | 3712000       |
| Angola          | Africa     | 1246700    | 20609294     | 100990000     |
+-----------------+------------+------------+--------------+---------------+
</code></pre>
<p>A country is big if it has an area of bigger than 3 million square km or a population of more than 25 million.</p>
<p>Write a SQL solution to output big countries' name, population and area.</p>
<p>For example, according to the above table, we should output:</p>
<pre><code>+--------------+-------------+--------------+
| name         | population  | area         |
+--------------+-------------+--------------+
| Afghanistan  | 25500100    | 652230       |
| Algeria      | 37100000    | 2381741      |
+--------------+-------------+--------------+
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> World (name varchar(<span style="color:#ae81ff">255</span>), continent varchar(<span style="color:#ae81ff">255</span>), area int, population int, gdp int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> World
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> World (name, continent, area, population, gdp) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;Afghanistan&#39;</span>, <span style="color:#e6db74">&#39;Asia&#39;</span>, <span style="color:#e6db74">&#39;652230&#39;</span>, <span style="color:#e6db74">&#39;25500100&#39;</span>, <span style="color:#e6db74">&#39;20343000000&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> World (name, continent, area, population, gdp) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;Albania&#39;</span>, <span style="color:#e6db74">&#39;Europe&#39;</span>, <span style="color:#e6db74">&#39;28748&#39;</span>, <span style="color:#e6db74">&#39;2831741&#39;</span>, <span style="color:#e6db74">&#39;12960000000&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> World (name, continent, area, population, gdp) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;Algeria&#39;</span>, <span style="color:#e6db74">&#39;Africa&#39;</span>, <span style="color:#e6db74">&#39;2381741&#39;</span>, <span style="color:#e6db74">&#39;37100000&#39;</span>, <span style="color:#e6db74">&#39;188681000000&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> World (name, continent, area, population, gdp) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;Andorra&#39;</span>, <span style="color:#e6db74">&#39;Europe&#39;</span>, <span style="color:#e6db74">&#39;468&#39;</span>, <span style="color:#e6db74">&#39;78115&#39;</span>, <span style="color:#e6db74">&#39;3712000000&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> World (name, continent, area, population, gdp) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;Angola&#39;</span>, <span style="color:#e6db74">&#39;Africa&#39;</span>, <span style="color:#e6db74">&#39;1246700&#39;</span>, <span style="color:#e6db74">&#39;20609294&#39;</span>, <span style="color:#e6db74">&#39;100990000000&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> name, population, area
<span style="color:#66d9ef">from</span> World
<span style="color:#66d9ef">where</span> area <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">3000000</span> <span style="color:#66d9ef">or</span> population <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">25000000</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is too simple, and using &ldquo;where&rdquo; to set relevant situations is ok.</p>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[262] Trips and Users</title>
            <link>https://www.marshalgao.com/leetcode262-trips-and-users/</link>
            <pubDate>Wed, 13 Jan 2021 14:46:36 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode262-trips-and-users/</guid>
            <description>Question The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are both foreign keys to the Users_Id at the Users table. Status is an ENUM type of (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’).
+----+-----------+-----------+---------+--------------------+----------+ | Id | Client_Id | Driver_Id | City_Id | Status |Request_at| +----+-----------+-----------+---------+--------------------+----------+ | 1 | 1 | 10 | 1 | completed |2013-10-01| | 2 | 2 | 11 | 1 | cancelled_by_driver|2013-10-01| | 3 | 3 | 12 | 6 | completed |2013-10-01| | 4 | 4 | 13 | 6 | cancelled_by_client|2013-10-01| | 5 | 1 | 10 | 1 | completed |2013-10-02| | 6 | 2 | 11 | 6 | completed |2013-10-02| | 7 | 3 | 12 | 6 | completed |2013-10-02| | 8 | 2 | 12 | 12 | completed |2013-10-03| | 9 | 3 | 10 | 12 | completed |2013-10-03| | 10 | 4 | 13 | 12 | cancelled_by_driver|2013-10-03| +----+-----------+-----------+---------+--------------------+----------+  The Users table holds all users.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are both foreign keys to the Users_Id at the Users table. Status is an ENUM type of (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’).</p>
<pre><code>+----+-----------+-----------+---------+--------------------+----------+
| Id | Client_Id | Driver_Id | City_Id |        Status      |Request_at|
+----+-----------+-----------+---------+--------------------+----------+
| 1  |     1     |    10     |    1    |     completed      |2013-10-01|
| 2  |     2     |    11     |    1    | cancelled_by_driver|2013-10-01|
| 3  |     3     |    12     |    6    |     completed      |2013-10-01|
| 4  |     4     |    13     |    6    | cancelled_by_client|2013-10-01|
| 5  |     1     |    10     |    1    |     completed      |2013-10-02|
| 6  |     2     |    11     |    6    |     completed      |2013-10-02|
| 7  |     3     |    12     |    6    |     completed      |2013-10-02|
| 8  |     2     |    12     |    12   |     completed      |2013-10-03|
| 9  |     3     |    10     |    12   |     completed      |2013-10-03| 
| 10 |     4     |    13     |    12   | cancelled_by_driver|2013-10-03|
+----+-----------+-----------+---------+--------------------+----------+
</code></pre>
<p>The Users table holds all users. Each user has an unique Users_Id, and Role is an ENUM type of (‘client’, ‘driver’, ‘partner’).</p>
<pre><code>+----------+--------+--------+
| Users_Id | Banned |  Role  |
+----------+--------+--------+
|    1     |   No   | client |
|    2     |   Yes  | client |
|    3     |   No   | client |
|    4     |   No   | client |
|    10    |   No   | driver |
|    11    |   No   | driver |
|    12    |   No   | driver |
|    13    |   No   | driver |
+----------+--------+--------+
</code></pre>
<p>Write a SQL query to find the cancellation rate of requests made by unbanned users (both client and driver must be unbanned) between <strong>Oct 1, 2013</strong> and <strong>Oct 3, 2013</strong>. The cancellation rate is computed by dividing the number of canceled (by client or driver) requests made by unbanned users by the total number of requests made by unbanned users.</p>
<p>For the above tables, your SQL query should return the following rows with the cancellation rate being rounded to two decimal places.</p>
<pre><code>+------------+-------------------+
|     Day    | Cancellation Rate |
+------------+-------------------+
| 2013-10-01 |       0.33        |
| 2013-10-02 |       0.00        |
| 2013-10-03 |       0.50        |
+------------+-------------------+
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Trips (Id int, Client_Id int, Driver_Id int, City_Id int, Status ENUM(<span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;cancelled_by_driver&#39;</span>, <span style="color:#e6db74">&#39;cancelled_by_client&#39;</span>), Request_at varchar(<span style="color:#ae81ff">50</span>))
<span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Users (Users_Id int, Banned varchar(<span style="color:#ae81ff">50</span>), <span style="color:#66d9ef">Role</span> ENUM(<span style="color:#e6db74">&#39;client&#39;</span>, <span style="color:#e6db74">&#39;driver&#39;</span>, <span style="color:#e6db74">&#39;partner&#39;</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Trips
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;10&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;2013-10-01&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;11&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;cancelled_by_driver&#39;</span>, <span style="color:#e6db74">&#39;2013-10-01&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;12&#39;</span>, <span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;2013-10-01&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;13&#39;</span>, <span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;cancelled_by_client&#39;</span>, <span style="color:#e6db74">&#39;2013-10-01&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;10&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;2013-10-02&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;11&#39;</span>, <span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;2013-10-02&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;7&#39;</span>, <span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;12&#39;</span>, <span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;2013-10-02&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;8&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;12&#39;</span>, <span style="color:#e6db74">&#39;12&#39;</span>, <span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;2013-10-03&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;9&#39;</span>, <span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;10&#39;</span>, <span style="color:#e6db74">&#39;12&#39;</span>, <span style="color:#e6db74">&#39;completed&#39;</span>, <span style="color:#e6db74">&#39;2013-10-03&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Trips (Id, Client_Id, Driver_Id, City_Id, Status, Request_at) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;10&#39;</span>, <span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;13&#39;</span>, <span style="color:#e6db74">&#39;12&#39;</span>, <span style="color:#e6db74">&#39;cancelled_by_driver&#39;</span>, <span style="color:#e6db74">&#39;2013-10-03&#39;</span>)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Users
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;No&#39;</span>, <span style="color:#e6db74">&#39;client&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Yes&#39;</span>, <span style="color:#e6db74">&#39;client&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;No&#39;</span>, <span style="color:#e6db74">&#39;client&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;No&#39;</span>, <span style="color:#e6db74">&#39;client&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;10&#39;</span>, <span style="color:#e6db74">&#39;No&#39;</span>, <span style="color:#e6db74">&#39;driver&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;11&#39;</span>, <span style="color:#e6db74">&#39;No&#39;</span>, <span style="color:#e6db74">&#39;driver&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;12&#39;</span>, <span style="color:#e6db74">&#39;No&#39;</span>, <span style="color:#e6db74">&#39;driver&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Users (Users_Id, Banned, <span style="color:#66d9ef">Role</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;13&#39;</span>, <span style="color:#e6db74">&#39;No&#39;</span>, <span style="color:#e6db74">&#39;driver&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> Request_at <span style="color:#66d9ef">as</span> <span style="color:#66d9ef">Day</span>, round(<span style="color:#66d9ef">avg</span>(<span style="color:#66d9ef">case</span> <span style="color:#66d9ef">when</span> Status <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;completed&#39;</span> <span style="color:#66d9ef">then</span> <span style="color:#ae81ff">0</span> <span style="color:#66d9ef">else</span> <span style="color:#ae81ff">1</span> <span style="color:#66d9ef">end</span>), <span style="color:#ae81ff">2</span>) <span style="color:#66d9ef">as</span> <span style="color:#e6db74">&#39;Cancellation Rate&#39;</span>
<span style="color:#66d9ef">from</span> Trips
<span style="color:#66d9ef">where</span> Client_Id <span style="color:#66d9ef">in</span> (<span style="color:#66d9ef">select</span> Users_Id <span style="color:#66d9ef">from</span> Users <span style="color:#66d9ef">where</span> Banned <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;No&#39;</span>) 
    <span style="color:#66d9ef">and</span> Driver_Id <span style="color:#66d9ef">in</span> (<span style="color:#66d9ef">select</span> Users_Id <span style="color:#66d9ef">from</span> Users <span style="color:#66d9ef">where</span> Banned <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;No&#39;</span>) 
    <span style="color:#66d9ef">and</span> Request_at <span style="color:#66d9ef">between</span> <span style="color:#e6db74">&#39;2013-10-01&#39;</span> <span style="color:#66d9ef">and</span> <span style="color:#e6db74">&#39;2013-10-03&#39;</span>
<span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> Request_at
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is not too difficult but interesting. Firstly, you can find all the unbanned users' ids (Users_Id). Then, you can use &ldquo;case&rdquo; to count all the cancelled orders. More importantly, if you use &ldquo;group by&rdquo;, the result would only have one element. So you can use &ldquo;avg()&rdquo; to cover all the elements, and the result is the cancellation rate. Finally, you should use &ldquo;round()&rdquo; to cut redundant numbers.</p>
<p>However, the question only let you find the cancellation rate between Oct 1 to Oct 3, so you need to add &ldquo;between &hellip; and &hellip;&rdquo;.</p>
<p>Also, there are two useful links, and I think they can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/telescope11/p/9909757.html">useful link 1</a></li>
<li><a href="https://www.w3school.com.cn/sql/sql_func_round.asp">useful link 2</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[197] Rising Temperature</title>
            <link>https://www.marshalgao.com/leetcode197-rising-temperature/</link>
            <pubDate>Tue, 12 Jan 2021 15:21:40 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode197-rising-temperature/</guid>
            <description>Question Table: Weather
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | recordDate | date | | temperature | int | +---------------+---------+ id is the primary key for this table. This table contains information about the temperature in a certain day.  Write an SQL query to find all dates&#39; id with higher temperature compared to its previous dates (yesterday).
Return the result table in any order.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Table: Weather</p>
<pre><code>+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| recordDate    | date    |
| temperature   | int     |
+---------------+---------+ 
id is the primary key for this table.   
This table contains information about the temperature in a certain day.
</code></pre>
<p>Write an SQL query to find all dates' id with higher temperature compared to its previous dates (yesterday).</p>
<p>Return the result table in <strong>any order</strong>.</p>
<p>The query result format is in the following example:</p>
<pre><code>Weather
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+   
| 1  | 2015-01-01 | 10          |
| 2  | 2015-01-02 | 25          |
| 3  | 2015-01-03 | 20          |
| 4  | 2015-01-04 | 30          |
+----+------------+-------------+

Result table:
+----+
| Id |
+----+
| 2  |
| 4  |
+----+
In 2015-01-02, temperature was higher than the previous day (10 -&gt; 25).
In 2015-01-04, temperature was higher than the previous day (20 -&gt; 30).
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Weather (Id int, RecordDate date, Temperature int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Weather
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Weather (Id, RecordDate, Temperature) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;2015-01-01&#39;</span>, <span style="color:#e6db74">&#39;10&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Weather (Id, RecordDate, Temperature) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;2015-01-02&#39;</span>, <span style="color:#e6db74">&#39;25&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Weather (Id, RecordDate, Temperature) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;2015-01-03&#39;</span>, <span style="color:#e6db74">&#39;20&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Weather (Id, RecordDate, Temperature) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;2015-01-04&#39;</span>, <span style="color:#e6db74">&#39;30&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> temp.id <span style="color:#66d9ef">as</span> Id
<span style="color:#66d9ef">from</span> (
    <span style="color:#66d9ef">select</span> w1.id, w1.recordDate, w1.Temperature, w2.Temperature <span style="color:#66d9ef">as</span> PreTemperature
    <span style="color:#66d9ef">from</span> Weather w1
    <span style="color:#66d9ef">left</span> <span style="color:#66d9ef">join</span> Weather w2 <span style="color:#66d9ef">on</span> date_add(w2.recordDate, interval <span style="color:#ae81ff">1</span> <span style="color:#66d9ef">day</span>) <span style="color:#f92672">=</span> w1.recordDate
) temp
<span style="color:#66d9ef">where</span> temp.Temperature <span style="color:#f92672">&gt;</span> temp.PreTemperature
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>For this question, firstly, you can make a new column, called &ldquo;PreTemperature&rdquo;, record the previous day&rsquo;s temperature, using &ldquo;left join&rdquo;. Then, you can select the elements whose current temperature is larger than previous temperature, getting the relevant &ldquo;Ids&rdquo;.</p>
<p>More importantly, &ldquo;data_add()&rdquo; can help you to realize the time discrimination.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://blog.csdn.net/qq_43154385/article/details/87690837">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[196] Delete Duplicate Emails</title>
            <link>https://www.marshalgao.com/leetcode196-delete-duplicate-emails/</link>
            <pubDate>Tue, 12 Jan 2021 14:36:11 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode196-delete-duplicate-emails/</guid>
            <description>Question Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique emails based on its smallest Id.
+----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+------------------+ Id is the primary key column for this table.  For example, after running your query, the above Person table should have the following rows:</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique emails based on its smallest Id.</p>
<pre><code>+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
Id is the primary key column for this table.
</code></pre>
<p>For example, after running your query, the above Person table should have the following rows:</p>
<pre><code>+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+
</code></pre>
<p><strong>Note</strong>:</p>
<p>Your output is the whole Person table after executing your sql. Use delete statement.</p>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Person
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Person (Id, Email) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;john@example.com&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Person (Id, Email) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;bob@example.com&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Person (Id, Email) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;john@example.com&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">delete</span> <span style="color:#66d9ef">from</span> Person
<span style="color:#66d9ef">where</span> Email <span style="color:#66d9ef">in</span> (
    <span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> 
    <span style="color:#66d9ef">from</span> (
        <span style="color:#66d9ef">select</span> Email
        <span style="color:#66d9ef">from</span> Person
        <span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> Email <span style="color:#66d9ef">having</span> <span style="color:#66d9ef">count</span>(Email) <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">1</span>
    ) temp1
) <span style="color:#66d9ef">and</span> Id <span style="color:#66d9ef">not</span> <span style="color:#66d9ef">in</span> (
    <span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span>
    <span style="color:#66d9ef">from</span> (
        <span style="color:#66d9ef">select</span> <span style="color:#66d9ef">min</span>(Id)
        <span style="color:#66d9ef">from</span> Person
        <span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> Email <span style="color:#66d9ef">having</span> <span style="color:#66d9ef">count</span>(Email) <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">1</span>
    ) temp2
)
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is easy, but you must use &ldquo;delete&rdquo;. Firstly, you need to find all the duplicated &ldquo;Emails&rdquo; and all the minimum &ldquo;Ids&rdquo;. Then, you can use &ldquo;delete&rdquo; to finish this question.</p>
<p>However, if you do not use &ldquo;select *&rdquo;, there will be an error, which is &ldquo;You can&rsquo;t specify target table &ldquo;Person&rdquo; for update in FROM clause. This is because sql do not allow anyone using itself quering results to update itself. So you need to make the quering result become another table, using &ldquo;select *&rdquo;.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/java-zzl/p/9739750.html">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[185] Department Top Three Salaries</title>
            <link>https://www.marshalgao.com/leetcode185-department-top-three-salaries/</link>
            <pubDate>Tue, 12 Jan 2021 13:43:33 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode185-department-top-three-salaries/</guid>
            <description>Question The Employee table holds all employees. Every employee has an Id, and there is also a column for the department Id.
+----+-------+--------+--------------+ | Id | Name | Salary | DepartmentId | +----+-------+--------+--------------+ | 1 | Joe | 85000 | 1 | | 2 | Henry | 80000 | 2 | | 3 | Sam | 60000 | 2 | | 4 | Max | 90000 | 1 | | 5 | Janet | 69000 | 1 | | 6 | Randy | 85000 | 1 | | 7 | Will | 70000 | 1 | +----+-------+--------+--------------+  The Department table holds all departments of the company.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>The Employee table holds all employees. Every employee has an Id, and there is also a column for the department Id.</p>
<pre><code>+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 85000  | 1            |
| 2  | Henry | 80000  | 2            |
| 3  | Sam   | 60000  | 2            |
| 4  | Max   | 90000  | 1            |
| 5  | Janet | 69000  | 1            |
| 6  | Randy | 85000  | 1            |
| 7  | Will  | 70000  | 1            |
+----+-------+--------+--------------+
</code></pre>
<p>The Department table holds all departments of the company.</p>
<pre><code>+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+
</code></pre>
<p>Write a SQL query to find employees who earn the top three salaries in each of the department. For the above tables, your SQL query should return the following rows (order of rows does not matter).</p>
<pre><code>+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Randy    | 85000  |
| IT         | Joe      | 85000  |
| IT         | Will     | 70000  |
| Sales      | Henry    | 80000  |
| Sales      | Sam      | 60000  |
+------------+----------+--------+
</code></pre>
<p><strong>Explanation</strong>:</p>
<p>In IT department, Max earns the highest salary, both Randy and Joe earn the second highest salary, and Will earns the third highest salary. There are only two employees in the Sales department, Henry earns the highest salary while Sam earns the second highest salary.</p>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Employee (Id int, Name varchar(<span style="color:#ae81ff">255</span>), Salary int, DepartmentId int)
<span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Department (Id int, Name varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Employee
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;Joe&#39;</span>, <span style="color:#e6db74">&#39;85000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Henry&#39;</span>, <span style="color:#e6db74">&#39;80000&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;Sam&#39;</span>, <span style="color:#e6db74">&#39;60000&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;Max&#39;</span>, <span style="color:#e6db74">&#39;90000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;Janet&#39;</span>, <span style="color:#e6db74">&#39;69000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;Randy&#39;</span>, <span style="color:#e6db74">&#39;85000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;7&#39;</span>, <span style="color:#e6db74">&#39;Will&#39;</span>, <span style="color:#e6db74">&#39;70000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Department
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;IT&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Sales&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> temp2.Department, temp2.Employee, temp2.Salary
<span style="color:#66d9ef">from</span> (
    <span style="color:#66d9ef">select</span> dense_rank() over(partition <span style="color:#66d9ef">by</span> DepartmentId <span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> Salary <span style="color:#66d9ef">desc</span>) <span style="color:#66d9ef">as</span> <span style="color:#e6db74">&#39;Rank&#39;</span>,
        temp1.Department,
        temp1.Employee,
        temp1.Salary
    <span style="color:#66d9ef">from</span> (
        <span style="color:#66d9ef">select</span> Employee.Name <span style="color:#66d9ef">as</span> Employee, Salary, DepartmentId, Department.Name <span style="color:#66d9ef">as</span> Department
        <span style="color:#66d9ef">from</span> Employee
        <span style="color:#66d9ef">inner</span> <span style="color:#66d9ef">join</span> Department <span style="color:#66d9ef">on</span> Employee.DepartmentId <span style="color:#f92672">=</span> Department.Id
    ) temp1
)temp2
<span style="color:#66d9ef">where</span> temp2.Rank <span style="color:#f92672">&lt;=</span> <span style="color:#ae81ff">3</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is similar to the #184. Firstly, you can combine the two tables, making the all the data covered in one table. Then, you can use &ldquo;dense_rank()&rdquo; to rank the salary. More importantly, you should use &ldquo;partition by&rdquo; rather than &ldquo;group by&rdquo;, which have differences. And if you want to use &ldquo;Rank&rdquo; as the column name, you need to add &lsquo;&rsquo;.</p>
<p>I am confused that the second &ldquo;select&rdquo; cannot use &ldquo;*&rdquo;, so I can just type all the column names. It is a little bit foolish. Finally, select the top 3 salaries' people of each department.</p>
<p>Also, there are two useful links, and I think they can help you. (chinese version)</p>
<ul>
<li><a href="https://blog.csdn.net/zsjwenrou/article/details/97130170">useful link 1</a></li>
<li><a href="https://www.cnblogs.com/lizongyan/p/13820701.html">useful link 2</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[184] Department Highest Salary</title>
            <link>https://www.marshalgao.com/leetcode184-department-highest-salary/</link>
            <pubDate>Tue, 12 Jan 2021 11:37:06 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode184-department-highest-salary/</guid>
            <description>Question The Employee table holds all employees. Every employee has an Id, a salary, and there is also a column for the department Id.
+----+-------+--------+--------------+ | Id | Name | Salary | DepartmentId | +----+-------+--------+--------------+ | 1 | Joe | 70000 | 1 | | 2 | Jim | 90000 | 1 | | 3 | Henry | 80000 | 2 | | 4 | Sam | 60000 | 2 | | 5 | Max | 90000 | 1 | +----+-------+--------+--------------+  The Department table holds all departments of the company.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>The Employee table holds all employees. Every employee has an Id, a salary, and there is also a column for the department Id.</p>
<pre><code>+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+
</code></pre>
<p>The Department table holds all departments of the company.</p>
<pre><code>+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+
</code></pre>
<p>Write a SQL query to find employees who have the highest salary in each of the departments. For the above tables, your SQL query should return the following rows (order of rows does not matter).</p>
<pre><code>+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
+------------+----------+--------+
</code></pre>
<p><strong>Explanation</strong>:</p>
<p>Max and Jim both have the highest salary in the IT department and Henry has the highest salary in the Sales department.</p>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Employee (Id int, Name varchar(<span style="color:#ae81ff">255</span>), Salary int, DepartmentId int)
<span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Department (Id int, Name varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Employee
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;Joe&#39;</span>, <span style="color:#e6db74">&#39;70000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Jim&#39;</span>, <span style="color:#e6db74">&#39;90000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;Henry&#39;</span>, <span style="color:#e6db74">&#39;80000&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;Sam&#39;</span>, <span style="color:#e6db74">&#39;60000&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, DepartmentId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;Max&#39;</span>, <span style="color:#e6db74">&#39;90000&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Department
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;IT&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Department (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Sales&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> temp1.Department, temp1.Employee, temp1.Salary
<span style="color:#66d9ef">from</span> (
    <span style="color:#66d9ef">select</span> Employee.Name <span style="color:#66d9ef">as</span> Employee, Employee.Salary, Employee.DepartmentId, Department.Name <span style="color:#66d9ef">as</span> Department
    <span style="color:#66d9ef">from</span> Employee
    <span style="color:#66d9ef">inner</span> <span style="color:#66d9ef">join</span> Department <span style="color:#66d9ef">on</span> Employee.DepartmentId <span style="color:#f92672">=</span> Department.Id
) temp1,
    (<span style="color:#66d9ef">select</span> <span style="color:#66d9ef">max</span>(Salary) <span style="color:#66d9ef">as</span> Salary, DepartmentId
    <span style="color:#66d9ef">from</span> Employee
    <span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> DepartmentId) temp2
<span style="color:#66d9ef">where</span> temp1.DepartmentId <span style="color:#f92672">=</span> temp2.DepartmentId <span style="color:#66d9ef">and</span> temp1.Salary <span style="color:#f92672">=</span> temp2.Salary
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is a little bit complex, but I think there would be other better solutions. Firstly, you can find all the highest salary of different departments. Then, you can just use this table - &ldquo;temp2&rdquo;- to find relevant people. Because different people meay have the same salary, you need to do the second step, finding all the relevant people.</p>
<p>However, when I submitted for the first time, I failed. Becasue according to the question, if an employee does not belong to any department, the result would be null, even if the employee&rsquo;s salary is extremely high. Therefore, the &ldquo;join&rdquo; should use &ldquo;inner join&rdquo; rather than &ldquo;left join&rdquo;. &ldquo;Inner join&rdquo; would only return the compared successfully ones, others would be set null.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/wgphp/p/8183812.html">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[183] Customers Who Never Order</title>
            <link>https://www.marshalgao.com/leetcode183-customers-who-never-order/</link>
            <pubDate>Mon, 11 Jan 2021 20:16:24 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode183-customers-who-never-order/</guid>
            <description>Question Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL query to find all customers who never order anything.
Table: Customers
+----+-------+ | Id | Name | +----+-------+ | 1 | Joe | | 2 | Henry | | 3 | Sam | | 4 | Max | +----+-------+  Table: Orders
+----+------------+ | Id | CustomerId | +----+------------+ | 1 | 3 | | 2 | 1 | +----+------------+  Using the above tables as example, return the following:</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL query to find all customers who never order anything.</p>
<p>Table: Customers</p>
<pre><code>+----+-------+
| Id | Name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+
</code></pre>
<p>Table: Orders</p>
<pre><code>+----+------------+
| Id | CustomerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+
</code></pre>
<p>Using the above tables as example, return the following:</p>
<pre><code>+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Customers (Id int, Name varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Orders (Id int, CustomerId int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Customers
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Customers (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;Joe&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Customers (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Henry&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Customers (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;Sam&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Customers (Id, Name) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;Max&#39;</span>)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Orders
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Orders (Id, CustomerId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;3&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Orders (Id, CustomerId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> Name <span style="color:#66d9ef">as</span> Customers
<span style="color:#66d9ef">from</span> (
    <span style="color:#66d9ef">select</span> Customers.Name, Orders.CustomerId
    <span style="color:#66d9ef">from</span> Customers
    <span style="color:#66d9ef">left</span> <span style="color:#66d9ef">join</span> Orders <span style="color:#66d9ef">on</span> Customers.Id <span style="color:#f92672">=</span> Orders.CustomerId
) temp
<span style="color:#66d9ef">where</span> temp.CustomerId <span style="color:#66d9ef">is</span> <span style="color:#66d9ef">null</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>For this question, firstly, you can combine the two tables, using &ldquo;left join&rdquo;. Then you can get a new table &ldquo;temp&rdquo;. If a customer does not purchase anything before, the value of &ldquo;CustomerId&rdquo; should be &ldquo;null&rdquo;. Therefore, you can select from &ldquo;temp&rdquo;, finding all the &ldquo;null CustomerId&quot;s. The relevant &ldquo;Name&quot;s are the results.</p>
<p>Also, there are two useful links, and I think they can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/wgphp/p/8183812.html">useful link 1</a></li>
<li><a href="https://blog.csdn.net/leave417/article/details/104513456">useful link 2</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[182] Duplicate Emails</title>
            <link>https://www.marshalgao.com/leetcode182-duplicate-emails/</link>
            <pubDate>Mon, 11 Jan 2021 17:20:59 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode182-duplicate-emails/</guid>
            <description>Question Write a SQL query to find all duplicate emails in a table named Person.
+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+  For example, your query should return the following for the above table:
+---------+ | Email | +---------+ | a@b.com | +---------+  Note: All emails are in lowercase.
SQL Schema Create table If Not Exists Person (Id int, Email varchar(255)) Truncate table Person insert into Person (Id, Email) values (&amp;#39;1&amp;#39;, &amp;#39;a@b.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Write a SQL query to find all duplicate emails in a table named Person.</p>
<pre><code>+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+
</code></pre>
<p>For example, your query should return the following for the above table:</p>
<pre><code>+---------+
| Email   |
+---------+
| a@b.com |
+---------+
</code></pre>
<p><strong>Note</strong>: All emails are in lowercase.</p>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Person (Id int, Email varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Person
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Person (Id, Email) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;a@b.com&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Person (Id, Email) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;c@d.com&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Person (Id, Email) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;a@b.com&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> Email
<span style="color:#66d9ef">from</span> Person
<span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> Email <span style="color:#66d9ef">having</span> <span style="color:#66d9ef">count</span>(Email) <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">1</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is extremely simple. Firstly, you can use &ldquo;group by&rdquo; to combine the same &ldquo;Email&rdquo;. Then, you can use &ldquo;having count&rdquo; function to select the elements which &ldquo;Email&rdquo; addresss appreas at least twice.</p>
<p>More importantly, I have a problem when addressing this question, due to duplicate space between &ldquo;count&rdquo; and &ldquo;(Email)&rdquo;.</p>
<p>Also, there are two useful links, and I think they can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/fengyh/p/10646774.html">useful link 1</a></li>
<li><a href="https://blog.csdn.net/rendeyishi/article/details/25118893">useful link 2</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>28 Psychological Effects That Product Managers Must Understand</title>
            <link>https://www.marshalgao.com/28-psychological-effects-that-product-managers-must-understand/</link>
            <pubDate>Mon, 11 Jan 2021 16:47:59 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/28-psychological-effects-that-product-managers-must-understand/</guid>
            <description>普通的产品解决问题，中等的产品服务用户，优秀的产品洞察人性。
晕轮效应
  定义：在生活中，我们一旦对某人的某种特征形成好或坏的印象后，在看待他的其他品质时，也会倾向于带上相似的态度。即“喜欢一个人就会喜欢他的一切”。
  产品中的应用：这里有一个很好的例子就是小米。大家都知道小米手机的利润空间是很低的，而小米的核心策略就是通过手机聚集一批高忠诚度的“米粉”，米粉对小米的产品形成“价格厚道，质量上乘”的用户认知以后，小米再通过生态链产品及软件产品盈利，数据显示一个米粉购买小米商品（包括生态链）的件数是远远高于友商的，即做到了“薄利多销”。
  首因效应
  定义：也称最初效应，在总体印象形成上，最初获得的信息比后来获得的信息影响更大的现象。也就是第一印象几乎决定了别人对你的总体印象。
  产品中的应用：这里有一个很好的例子，就是拼多多。拼多多一开始给大家的印象就是假货居多，所以即便是现在已经花了很大的力度去打假，依然有很多人因为假货拒绝使用拼多多，即便拼多多的东西真的很便宜实惠。这是因为用户已经形成了初始认知，短期内难以改变，这也是为什么京东一直宣传正品行货的理念来不断强化用户认知的原因。
  登门槛效应
  定义：又称得寸进尺效应，是指一个人一旦接受了他人的一个微不足道的要求，为了避免认知上的不协调，或想给他人以前后一致的印象，就有可能接受更大的要求。在一般情况下，人们都不愿接受较高较难的要求，因为它费时费力又难以成功，相反，人们却乐于接受较小的、较易完成的要求，在实现了较小的要求后，人们才慢慢地接受较大的要求。
  产品中的应用：要设置合理的参与门槛，以方便目标用户参与，减少流失。当然也不是说参与门槛越低越好，比如一些优质的内容社区如人人都是产品经理，肯定不能谁想发文章就可以乱发，肯定是要经过审核以保证内容的优质性。所以PM要根据自己的目标人群设置合理的参与门槛，如果是普适性活动，建议最开始的参与门槛一定要足够低，甚至连登录都可以不要，采用一键获取微信OpenID等方式替代登录。
  巴纳姆效应
  定义：巴纳姆效应认为人们总是特别容易相信一种对于自己的笼统描述。即使这种描述十分空洞，但人们还是确信这就是自己真正的人格面貌。比如白羊座的人渴望一种稳定的社交关系，白羊座的人一听就觉得和自己很符合，但是仔细一想，谁不渴望一种稳定的社交关系呢？所以这个笼统描述是普适的。
  产品中的应用：主要是存在于用户调研中，用户往往不知道自己的真实想法是什么，因此有经验的产品经理或者用研人员会客观地给用户一些发散性的提示，防止出现主观的引导而让用户误认为自己有这样的需求。而一些小白产品经理和用研人员经常会犯这样的错误，比如自己想做一个信息流的产品，就问用户：你是否有时候会觉得无聊，想看一些好玩有趣的事情打发时间？得到了用户肯定的回答之后，就觉得信息流产品是用户的痛点。但实际上这里的痛点是“用户有时候会觉得无聊”，信息流产品只是解决这个痛点的一个方式，但不一定是最好的方式，因为用户自己也不知道自己的需求是什么。
  旁观者效应
  定义：旁观者效应也叫“责任分散效应”，即他人的在场使得个体采取某种行动的可能性降低，也可以理解成“原本属于一个人的责任被主观分散到其它在场者身上了”。
  产品中的应用：在裂变分享的时候，我们应该采取一些措施刺激和激励用户分享到个人，而不是分享到群里，因为如果不是非常亲密的群，群成员这个时候大多会出现“旁观者效应”，即大多处于观望状态，不会采取行动。
  二八法则
  定义：二八定律又名80/20定律、是19世纪末20世纪初意大利经济学家帕累托发现的。他认为，在任何一组东西中，最重要的只占其中一小部分，约20%，其余80%尽管是多数，却是次要的，因此又称二八定律。
  产品中的应用：往往20%的用户会创造80%的价值，尤其是在电商领域中，基本上80%的GMV都是由20%的忠实用户贡献的。因此产品经理在设计产品逻辑的时候，要重点想以下两个问题：如何集中精力服务好20%的高价值用户以保持粘性？如何将剩下80%的普通用户转化成高价值用户？
  搭便车效应
  定义：搭便车效应指的是某个成员为集体所做出的努力使得全体成员都可能获利，但成本却由这个成员自己承担。
  产品中的应用：淘宝双11合伙人组战队集能量的玩法，声势浩大，也取得了很好的效果，其中有一个玩法设计的非常巧妙：最后的现金红包并不是均分的，而是按照成员对团队的贡献发放对应的奖励。事后有不少人吐糟自己的队友里面有浑水摸鱼的，组了战队却不付出努力，还好最后不是按照人头均分的奖励，不然那些真正付出努力的用户肯定会有负面情绪，不利于下一次活动的开展。
  结伴效应
  定义：个人活动由于有他人参加导致效率变化。有两个表现：由于有他人增加会导致效率提高，或者是由于有他人增加导致效率下降。
  产品中的应用：组队、拼团等玩法就是利用了这个效应。拼团在一定程度上对用户有一定激励：因为可以和好朋友一起参与活动；而拼团本身也是一种限制：因为如果拼团成功，一个人的撤销、暂停等行为势必会对另一个人造成影响，用户的犯错成本变高。在设计产品的过程中可以根据活动的玩法让用户适当结伴，增加用户的参与积极性或者是提高用户犯错成本。</description>
            <content type="html"><![CDATA[<p>普通的产品解决问题，中等的产品服务用户，优秀的产品洞察人性。</p>
<p><strong>晕轮效应</strong></p>
<ul>
<li>
<p>定义：在生活中，我们一旦对某人的某种特征形成好或坏的印象后，在看待他的其他品质时，也会倾向于带上相似的态度。即“喜欢一个人就会喜欢他的一切”。</p>
</li>
<li>
<p>产品中的应用：这里有一个很好的例子就是小米。大家都知道小米手机的利润空间是很低的，而小米的核心策略就是通过手机聚集一批高忠诚度的“米粉”，米粉对小米的产品形成“价格厚道，质量上乘”的用户认知以后，小米再通过生态链产品及软件产品盈利，数据显示一个米粉购买小米商品（包括生态链）的件数是远远高于友商的，即做到了“薄利多销”。</p>
</li>
</ul>
<p><strong>首因效应</strong></p>
<ul>
<li>
<p>定义：也称最初效应，在总体印象形成上，最初获得的信息比后来获得的信息影响更大的现象。也就是第一印象几乎决定了别人对你的总体印象。</p>
</li>
<li>
<p>产品中的应用：这里有一个很好的例子，就是拼多多。拼多多一开始给大家的印象就是假货居多，所以即便是现在已经花了很大的力度去打假，依然有很多人因为假货拒绝使用拼多多，即便拼多多的东西真的很便宜实惠。这是因为用户已经形成了初始认知，短期内难以改变，这也是为什么京东一直宣传正品行货的理念来不断强化用户认知的原因。</p>
</li>
</ul>
<p><strong>登门槛效应</strong></p>
<ul>
<li>
<p>定义：又称得寸进尺效应，是指一个人一旦接受了他人的一个微不足道的要求，为了避免认知上的不协调，或想给他人以前后一致的印象，就有可能接受更大的要求。在一般情况下，人们都不愿接受较高较难的要求，因为它费时费力又难以成功，相反，人们却乐于接受较小的、较易完成的要求，在实现了较小的要求后，人们才慢慢地接受较大的要求。</p>
</li>
<li>
<p>产品中的应用：要设置合理的参与门槛，以方便目标用户参与，减少流失。当然也不是说参与门槛越低越好，比如一些优质的内容社区如人人都是产品经理，肯定不能谁想发文章就可以乱发，肯定是要经过审核以保证内容的优质性。所以PM要根据自己的目标人群设置合理的参与门槛，如果是普适性活动，建议最开始的参与门槛一定要足够低，甚至连登录都可以不要，采用一键获取微信OpenID等方式替代登录。</p>
</li>
</ul>
<p><strong>巴纳姆效应</strong></p>
<ul>
<li>
<p>定义：巴纳姆效应认为人们总是特别容易相信一种对于自己的笼统描述。即使这种描述十分空洞，但人们还是确信这就是自己真正的人格面貌。比如白羊座的人渴望一种稳定的社交关系，白羊座的人一听就觉得和自己很符合，但是仔细一想，谁不渴望一种稳定的社交关系呢？所以这个笼统描述是普适的。</p>
</li>
<li>
<p>产品中的应用：主要是存在于用户调研中，用户往往不知道自己的真实想法是什么，因此有经验的产品经理或者用研人员会客观地给用户一些发散性的提示，防止出现主观的引导而让用户误认为自己有这样的需求。而一些小白产品经理和用研人员经常会犯这样的错误，比如自己想做一个信息流的产品，就问用户：你是否有时候会觉得无聊，想看一些好玩有趣的事情打发时间？得到了用户肯定的回答之后，就觉得信息流产品是用户的痛点。但实际上这里的痛点是“用户有时候会觉得无聊”，信息流产品只是解决这个痛点的一个方式，但不一定是最好的方式，因为用户自己也不知道自己的需求是什么。</p>
</li>
</ul>
<p><strong>旁观者效应</strong></p>
<ul>
<li>
<p>定义：旁观者效应也叫“责任分散效应”，即他人的在场使得个体采取某种行动的可能性降低，也可以理解成“原本属于一个人的责任被主观分散到其它在场者身上了”。</p>
</li>
<li>
<p>产品中的应用：在裂变分享的时候，我们应该采取一些措施刺激和激励用户分享到个人，而不是分享到群里，因为如果不是非常亲密的群，群成员这个时候大多会出现“旁观者效应”，即大多处于观望状态，不会采取行动。</p>
</li>
</ul>
<p><strong>二八法则</strong></p>
<ul>
<li>
<p>定义：二八定律又名80/20定律、是19世纪末20世纪初意大利经济学家帕累托发现的。他认为，在任何一组东西中，最重要的只占其中一小部分，约20%，其余80%尽管是多数，却是次要的，因此又称二八定律。</p>
</li>
<li>
<p>产品中的应用：往往20%的用户会创造80%的价值，尤其是在电商领域中，基本上80%的GMV都是由20%的忠实用户贡献的。因此产品经理在设计产品逻辑的时候，要重点想以下两个问题：如何集中精力服务好20%的高价值用户以保持粘性？如何将剩下80%的普通用户转化成高价值用户？</p>
</li>
</ul>
<p><strong>搭便车效应</strong></p>
<ul>
<li>
<p>定义：搭便车效应指的是某个成员为集体所做出的努力使得全体成员都可能获利，但成本却由这个成员自己承担。</p>
</li>
<li>
<p>产品中的应用：淘宝双11合伙人组战队集能量的玩法，声势浩大，也取得了很好的效果，其中有一个玩法设计的非常巧妙：最后的现金红包并不是均分的，而是按照成员对团队的贡献发放对应的奖励。事后有不少人吐糟自己的队友里面有浑水摸鱼的，组了战队却不付出努力，还好最后不是按照人头均分的奖励，不然那些真正付出努力的用户肯定会有负面情绪，不利于下一次活动的开展。</p>
</li>
</ul>
<p><strong>结伴效应</strong></p>
<ul>
<li>
<p>定义：个人活动由于有他人参加导致效率变化。有两个表现：由于有他人增加会导致效率提高，或者是由于有他人增加导致效率下降。</p>
</li>
<li>
<p>产品中的应用：组队、拼团等玩法就是利用了这个效应。拼团在一定程度上对用户有一定激励：因为可以和好朋友一起参与活动；而拼团本身也是一种限制：因为如果拼团成功，一个人的撤销、暂停等行为势必会对另一个人造成影响，用户的犯错成本变高。在设计产品的过程中可以根据活动的玩法让用户适当结伴，增加用户的参与积极性或者是提高用户犯错成本。</p>
</li>
</ul>
<p><strong>社会刻板效应</strong></p>
<ul>
<li>
<p>定义：把一群人的特征加以总结，然后把这个特征强加到这个群体中的每一个人身上，忽略个别差异。比如“南方人都细腻，北方人都豪爽；男人都勇敢，女人都细腻”等观点。</p>
</li>
<li>
<p>产品中的应用：这一点常发生在产品经理对用户分层对待的时候，过分看重整体特征，而忽略了个体差异。比如认为三四线用户的消费能力一定比一二线城市低，对商品的偏好一定是低价优先，质量其次；而一二线的用户一定都注重品质，对价格不敏感等等。而实际上每个个体都是有差异的，虽然城市的线级分布一定程度上可以表现消费能力，但三四线依然存在一大批高收入高消费的人群，而一二线也存在一大批低收入低消费的人群。因此重点在于多维度对用户分层，而不是单一维度用固有印象对待所有用户。</p>
</li>
</ul>
<p><strong>近因效应</strong></p>
<ul>
<li>
<p>定义：也称最近效应，在总体印象上，新近获得的信息比原来获得的信息影响更大的现象。</p>
</li>
<li>
<p>产品中的应用：虽然大家对京东的原有印象是正品行货，但是当年出现假酒事件也让很多用户瞬间对京东“粉转路”，这就是近因效应的体现。一旦出现这类问题，除了积极采取各项措施应对之外，还有一个非常有效的方法：时间。既然是“近”因效应，随着时间的流逝，“近”也早晚会变成“远”，当用户都快要忘记的时候，采取一些正向的措施再次引发“近因效应”，就可以最大程度将用户的认知带回到现在。也有很多出现负面新闻的明星用这个效应进行公关，即出了负面新闻就潜水一段时间，等到用户基本忘记了再以正面的形象复出。</p>
</li>
</ul>
<p><strong>霍桑效应</strong></p>
<ul>
<li>
<p>定义：又称霍索恩效应，是当观察者知道自己成为被观察对象而改变行为倾向的反应。</p>
</li>
<li>
<p>产品中的应用：在做用户调研的时候，往往除了调研员在和用户口头交流之外，在单向玻璃的另外一面，还隐藏着几位专业的观察员，通过高清摄像头仔细观察着用户的眼神、动作、神态等细节，从而给出更加准确的判断。而用户往往不知道还有观察员的存在，因此作出的反应会更加客观可信。这样做的目的就是为了防止霍桑效应的出现导致最后的结论不够正确。</p>
</li>
</ul>
<p><strong>鸟笼逻辑</strong></p>
<ul>
<li>
<p>定义：挂一个漂亮的鸟笼在房间里最显眼的地方，过不了几天，主人一定会做出下面两个选择之一：把鸟笼扔掉，或者买一只鸟回来放在鸟笼里，这就是惯性思维的体现。</p>
</li>
<li>
<p>产品中的应用：这个思路最好的例子是拍立得，大家都知道拍立得机身的价格并不贵，但是相纸却非常昂贵。而一旦买了某个拍立得，由于相纸只能使用该品牌的相纸，而产生巨大的后续消费。同样电商平台经常会给用户发一些优惠券、现金补贴，用户领取了之后觉得占到了便宜，就会下单。再或者，当用户拥有了iPad，如果总使用，那么用户就会思考是不是需要买笔或是键盘。这也是利用了这个思维：给用户发一个鸟笼，用户肯定会想着如何利用这个鸟笼。个人理解这其实是创造需求的基石。</p>
</li>
</ul>
<p><strong>破窗效应</strong></p>
<ul>
<li>
<p>定义：心理学的研究上有个现象叫做“破窗效应”，就是说，一个房子如果窗户破了，没有人去修补，隔不久，其它的窗户也会莫名其妙的被人打破。</p>
</li>
<li>
<p>产品中的应用：个人认为这个效应的应用范围非常广泛，比如在客诉的处理中。如果一个用户投诉没有得到及时的处理，或许还可以正常运作，但是当客诉积累到一个临界值，就会爆发，可能引起大面积用户投诉。所以临界值是破窗效应的关键，也是留给产品经理修改Bug或者作出运营调整的“安全时间”。</p>
</li>
</ul>
<p><strong>凡勃伦效应</strong></p>
<ul>
<li>
<p>定义：指消费者对一种商品需求的程度因其标价较高而增加。它反映了人们进行挥霍性消费的心理愿望。商品价格定得越高，越能受到消费者的青睐。商品价格越高消费者反而越愿意购买的消费倾向，最早由美国经济学家凡勃伦注意到，因此被命名为“凡勃伦效应”。</p>
</li>
<li>
<p>产品中的应用：对于GMV（Gross Merchandise Value）导向的产品，这个原则或许能派上用处，很多奢侈品也是利用了这个效应。</p>
</li>
</ul>
<p><strong>马斯洛需求层次理论</strong></p>
<ul>
<li>
<p>定义：马洛斯需求层次理论中说明人的需求有五个层次。即：生理需求、安全需求、爱和归属的需求、尊重需求、自我实现的需求。这五层需求从低到高，而当低层的需求满足了以后才会继续去追逐高层的需求。</p>
</li>
<li>
<p>产品中的应用：这个理论的用途可以说是非常非常广泛，最根本的产品如何定位也需要借鉴这个表格，比如XX同城交友软件可能就定位于生理需求，知乎可能定位为尊重&amp;自我实现需求。再比如一些好的游戏，可以将这些需求贯穿游戏主人翁的情节线路，让游戏获得更好的可沉浸感。用户可以在游戏里建立住所，获得安全的保障；还可以拜师交友恋爱，满足爱和归属的需求；同时各类游戏段位的称号如王者，可以让用户获得尊重。</p>
</li>
</ul>
<p><strong>边际效应</strong></p>
<ul>
<li>
<p>定义：当用户获得&amp;购买&amp;消费某种物品的数量越多，则愿意为这件物品支付或者对其买账的成本及意愿也越低，此即所谓的边际效应。例如当人吃第一个包子时感觉是最好的，但当包子越吃越多，肚子越来越饱，包子所带来的满足感也就越小。</p>
</li>
<li>
<p>产品中的应用：给用户的激励要适当，过分的激励会导致用户愿意付出的成本更低，也就是把用户养“刁”了。且奖励的种类可以丰富一些，让用户不至于疲劳。</p>
</li>
</ul>
<p><strong>超限效应</strong></p>
<ul>
<li>
<p>定义：美国著名作家马克吐温有次在教堂听牧师演讲。最初他觉得牧师讲得使人感动，就打算捐献自己所有的钱；之后由于牧师喋喋不休，他很不耐烦，就打算就捐一点钱；直到最后他的耐心终于耗尽，决定一分钱也不捐；甚至到后面由于过于气愤，不但不捐钱，还偷了牧师2块钱，后人通过此故事领悟出超限效应。这个效应说明，一旦刺激过多、过强、过久，不但不会产生效果，相反还会让人产生不耐烦等逆反心理。</p>
</li>
<li>
<p>产品中的应用：产品设计中有适当的阶梯制度和及时性奖励肯定是必要的，但是如果阶梯奖励差距太大，难度太高，一旦超过某个阀值，就会让用户产生焦躁、不耐烦等逆反心理。因此在设计产品的时候一定要注意各项指标不要超过用户的阈值，否则可能适得其反。</p>
</li>
</ul>
<p><strong>鲶鱼效应</strong></p>
<ul>
<li>
<p>定义：挪威渔民在海上捕捞沙丁鱼，由于沙丁鱼没有刺激和活动会导致缺氧而很快死去，于是渔民会在鱼群中放几条鲶鱼，而鲶鱼是沙丁鱼的天敌，沙丁鱼为了躲避鲶鱼不得不到处逃窜。这个结果导致沙丁鱼不会因为窒息而死亡。于是后人将其现象称为鲶鱼效应。</p>
</li>
<li>
<p>产品中的应用：这一效应是相对于上面的超限效应来说的，超限制效应说明长时间的紧张感带来的压力给用户的危害，而鲶鱼效应正好相反。这个效应主要说明在适当的竞争和紧张状态下，能更好的发挥人的能力和主观能动性。所以，超限效应是在设立阈值，鲶鱼效应是在兜底。</p>
</li>
</ul>
<p><strong>暗示效应</strong></p>
<ul>
<li>
<p>定义：暗示效应指利用含蓄、抽象、诱导、欺骗等间接方法影响人的心理、思想、以及行为，从而诱导他人按照自己想要的方法去行动，且该行动符合暗示者的期望目标的效应。例如三国时期曹操望梅止渴的故事，就是运用暗示效应的典型案例。</p>
</li>
<li>
<p>产品中的应用：最典型的就是各类页游宣传时候用的“黄色露骨的美女照”，带有强烈的暗示效应。还有就是各类产品定价总喜欢9.9、8.88元等，虽然9.9元和10元只差了0.1元，但是这类暗示会让用户误以为很划算。电商的商详页面头部也经常会出现虚拟的“XXX刚刚购买了此商品”轮播信息流，就是为了给用户暗示“这个商品很划算，很多人买”。</p>
</li>
</ul>
<p><strong>留白效应</strong></p>
<ul>
<li>
<p>定义：在小说、绘画、漫画、电影、雕塑等艺术创作过程中，适当地留白，作品会留给读者想象和再创作的空间，在读者思考的过程中，会获得对作品更深层次的理解和把握，从而给作品取得良好效果，这就是留白效应（又称为空白效应）。</p>
</li>
<li>
<p>产品中的应用：世界上没有一样东西是完美无缺的，产品也一样，没有人可以做出完美无缺的产品。因此可以把小部分的主动权交给用户，根据用户的发挥来改进产品。我们经常看到有人吐槽某某产品的某个体验做的不好，但是又一直不改，我有时候会想：是不是产品经理设计的时候故意留下一下小瑕疵，让用户自己去发现？当你愿意去为了一个小细节吹毛求疵的时候，那说明你对这个产品已经像孩子一样，你希望它更好，这个时候用户对产品的忠诚度就极其高了。所以别总想着给用户最好的体验，很多时候要反过来想：是不是可以让用户为我们的产品做一点付出？</p>
</li>
</ul>
<p><strong>紫格尼克记忆效应</strong></p>
<ul>
<li>
<p>定义：心理学家布鲁玛·紫格尼克曾经给一群孩子布置了作业，她只让一部分孩子完成作业，另一部分则故意令其中途停顿。之后经过测试，中途没完成作业的孩子对本次作业的内容记忆犹新，而完成作业的孩子大多忘记了本次作业内容。这个试验的结论是：因为完成欲望得到满足，故此人们对已经完成的工作比较健忘；而尚未完成的工作因为完成欲望没有得到满足，导致心里面放不下，并会倾向于继续完成它，于是脑袋中时刻记忆着这些内容。此即为紫格尼克效应。</p>
</li>
<li>
<p>产品中的应用：你一定想不到，微信聊天列表页底部Tab右上角的未读消息红色数字的提示，其实就是利用了这个效应，用户发现自己还有未完成阅读的消息，会更加倾向于去完成。同时各类游戏中设计的“进度条”，也让用户更有动力去完成。</p>
</li>
</ul>
<p><strong>色彩心理学</strong></p>
<ul>
<li>
<p>定义：色彩可以影响到人的方方面面，例如知觉、感情、视觉、记忆、象征、情绪等，应用也相当广泛，包括艺术、游戏、社会学等方面均有应用。色彩往往带有心理学的暗示作用，在应用上更可以用颜色区分重要的信息。</p>
</li>
<li>
<p>产品中的应用：如果你是娱乐型的产品，可能红黄色等比较青春靓丽的颜色比较适合你；如果你是教育类产品，那可能简约大气的白色、蓝色等比较适合你；如果你是电商类，那可能大红大紫等热闹促销感很强的颜色比较适合你。</p>
</li>
</ul>
<p><strong>达维多定律</strong></p>
<ul>
<li>
<p>定义：1992年，曾任职于英特尔的副总裁威廉·达维多提出了一个观点，他认为：一家企业如果要在市场上占据主导地位，就必须第一个开发出新一代产品。如果被动的第二或者第三个推出新产品，那么获得的利益肯定就远不如第一家企业。此即为达维多定律。</p>
</li>
<li>
<p>产品中的应用：一款好的产品，一定要是某个领域的引领者，而不是追随者。当然这里并不是让你做出一款独一无二、前无古人后无来者的产品出来，这也不现实。最好的方式应该是站在巨人的肩膀上进行再次创新，找到自己的核心竞争力和创新点，并且是足够颠覆性的创新点。</p>
</li>
</ul>
<p><strong>名人效应</strong></p>
<ul>
<li>定义：名人所引起的扩大影响和引起注意的效应，即为名人效应。</li>
<li>产品中的应用：找十个普通用户，不如找到一个KOL（意见领袖）。</li>
</ul>
<p><strong>狮羊效应</strong></p>
<ul>
<li>
<p>定义：狮羊效应源于拿破仑的一句名言：一只狮子带领九十九只绵羊，可以打败一只绵羊带领的九十九只狮子。这个效应说明了主帅的重要性。</p>
</li>
<li>
<p>产品中的应用：在产品开发中，外行领导内行，外行干预研发的现象可谓屡见不鲜。最常见的情况是，设计过程中老板或者不懂行的上级突然拍脑袋，想要加入某个创意；或者在开发中途更改开发方向，导致原有设计全部作废，必须重新开始设计，从而导致项目延期。类似这类情况可谓屡见不鲜。正所谓兵熊熊一个，将熊熊一窝，公司的老板不行，那么是很难做出成绩的，项目也很难保证成功。选公司先看老板，特别是小公司的老板尤其重要（与之相对的大公司，则是看项目的直属上级）。</p>
</li>
</ul>
<p><strong>莫扎特效应</strong></p>
<ul>
<li>
<p>定义：1993年，美国戈登·肖教授进行了一项实验。他让他的学生在听完莫扎特的歌曲后，立即进行空间推理测验。试验结果表明，他的学生在听完莫扎特的歌曲后，空间推理能力获得了明显提高。此即为莫扎特效应。这个效应表明音乐具有很重要的魔力，可以有效的运用在人的大脑的潜力开发、影响人的情绪等方面。</p>
</li>
<li>
<p>产品中的应用：可以利用音效让用户获得更好的参与感，比如点击金币会有钱收入口袋的清脆响等。</p>
</li>
</ul>
<p><strong>长尾效应</strong></p>
<ul>
<li>
<p>定义：从人们需求的角度来看，大多数的需求会集中在头部，而这部分我们可以称之为流行，而分布在尾部的需求是个性化的，零散的小量的需求。而这部分差异化的、少量的需求会在需求曲线上面形成一条长长的“尾巴”，而所谓长尾效应就在于它的数量上，将所有非流行的市场累加起来就会形成一个比流行市场还大的市场。</p>
</li>
<li>
<p>产品中的应用：不要过分集中于头部的大需求，可以找到需求体量没有那么大，但是也足够支撑起一个伟大的产品的需求和人群进行设计。比如聚美优品，就是找到了一个巨头没有那么细致运营，但是也足够大的美妆电商需求，这类需求相对而言更容易成功。再有，得物、心心以及早期仅集中聊天功能的QQ。</p>
</li>
</ul>
<p><strong>半途效应</strong></p>
<ul>
<li>
<p>定义：半途效应是指在激励过程中达到半途时，由于心理因素及环境因素的交互作用而导致的对于目标行为的一种负面影响。大量的事实表明，人的目标行为的中止期多发生在&quot;半途&quot;附近，在人的目标行为过程的中点附近是一个极其敏感和极其脆弱的活跃区域。导致半途效应的原因主要有两个，一是目标选择的合理性，目标选择的越不合理越容易出现半途效应；二是个人的意志力，意志力越弱的人越容易出现半途效应。</p>
</li>
<li>
<p>产品中的应用：所有的理论都有两面性，比如半途效应：一方面我们可以设置合理的目标，让更多的用户可以达到，但是另一方面也有的产品形态恰恰是利用了这个效应，让更多的人达不到。比如拼多多的领现金活动，拉X个好友助力可以获得50元红包，而游戏设计者恰恰是通过合理的难度设计，让绝大部分用户都在拉个几个用户之后发现难度较大就放弃，这样50元红包并未成功发出，在零成本的情况下用户已经为平台拉了几个人。</p>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Principles of Advertising Algorithms</title>
            <link>https://www.marshalgao.com/principles-of-advertising-algorithms/</link>
            <pubDate>Mon, 11 Jan 2021 15:00:18 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/principles-of-advertising-algorithms/</guid>
            <description>本文将以Google和Fackbook的竞价系统为主线，阐述其内在的算法原理。
竞价系统
 GSP（Generalized Second Price  Google采用的竞价方式  GSP &amp;amp; VCG（Vickrey-Clarke-Groves）  Facebook采用的竞价方式   GSP
简而言之就是按照下一位出价来进行实际扣费，为了鼓励广告主提高素材、广告点击率。
\[cost=next price\times\frac{next\ quality}{current\ quality}+0.01\]
举例说明：
   广告位 平均每小时点击量 广告主 出价（CPC）     1 200 A 10   2 100 B 4   null null C 2    按照上表，此时A的出价为4.01，B的出价为2.01，C竞价失败。
变化一：
如果A出价$7（少于A认为这个广告本身的价值），B出价$8（多于B认为这个广告的价值），则B就会以$7.01拍得第一个广告位，但是这比预想多了$3.01。
变化二：
如果A出价$3.5，B出价$3，那么A就会以$3.01拍得第一个广告位。但如果B出价$3.6，B会以$3.51拍得第一个广告位，并且节省了$0.49。
有这样一个场景，A的真实出价是$10，B出不起那么高的价格，那么B会认为既然得不到那就同归于尽，于是出价$9.99，这样A没有得到一点便宜。这种恶意竞价对双方都不友好。
为了解决上述问题，Google在系统里引入了质量得分的因素，质量得分的关键是CTR（ClickThrough Rate）。显然，在竞价排名时，不仅要考虑价格，还要考虑综合竞价、点击率、广告相关性、广告账户历史等等。
GSP是一种稳定的竞价方式，可操作性很强，现阶段很多互联网广告平台都采用这种竞价方式。但GSP的不足之处在于，竞价的结果不一定是全局最优化的，于是VCG竞价算法出现了。
VCG
基本原理就是广告主为参加拍卖过程中给别的广告主带来的损失之和来买单定价。
举例说明：
   广告位 平均每小时点击量 广告主 出价（CPC）     1 200 A 10   2 100 B 4   null null C 2    A不参加竞价，B和C的总费用为\(4\times200+2\times100=1000\)。</description>
            <content type="html"><![CDATA[<p>本文将以Google和Fackbook的竞价系统为主线，阐述其内在的算法原理。</p>

<p><strong>竞价系统</strong></p>

<ul>
<li>GSP（Generalized Second Price

<ul>
<li>Google采用的竞价方式</li>
</ul></li>
<li>GSP &amp; VCG（Vickrey-Clarke-Groves）

<ul>
<li>Facebook采用的竞价方式</li>
</ul></li>
</ul>

<p><strong>GSP</strong></p>

<p>简而言之就是按照下一位出价来进行实际扣费，为了鼓励广告主提高素材、广告点击率。</p>

<p><span  class="math">\[cost=next price\times\frac{next\ quality}{current\ quality}+0.01\]</span></p>

<p>举例说明：</p>

<table>
<thead>
<tr>
<th align="center">广告位</th>
<th align="center">平均每小时点击量</th>
<th align="center">广告主</th>
<th align="center">出价（CPC）</th>
</tr>
</thead>

<tbody>
<tr>
<td align="center">1</td>
<td align="center">200</td>
<td align="center">A</td>
<td align="center">10</td>
</tr>

<tr>
<td align="center">2</td>
<td align="center">100</td>
<td align="center">B</td>
<td align="center">4</td>
</tr>

<tr>
<td align="center">null</td>
<td align="center">null</td>
<td align="center">C</td>
<td align="center">2</td>
</tr>
</tbody>
</table>

<p>按照上表，此时A的出价为4.01，B的出价为2.01，C竞价失败。</p>

<p>变化一：</p>

<p>如果A出价$7（少于A认为这个广告本身的价值），B出价$8（多于B认为这个广告的价值），则B就会以$7.01拍得第一个广告位，但是这比预想多了$3.01。</p>

<p>变化二：</p>

<p>如果A出价$3.5，B出价$3，那么A就会以$3.01拍得第一个广告位。但如果B出价$3.6，B会以$3.51拍得第一个广告位，并且节省了$0.49。</p>

<p>有这样一个场景，A的真实出价是$10，B出不起那么高的价格，那么B会认为既然得不到那就同归于尽，于是出价$9.99，这样A没有得到一点便宜。这种恶意竞价对双方都不友好。</p>

<p>为了解决上述问题，Google在系统里引入了质量得分的因素，质量得分的关键是CTR（ClickThrough Rate）。显然，在竞价排名时，不仅要考虑价格，还要考虑综合竞价、点击率、广告相关性、广告账户历史等等。</p>

<p>GSP是一种稳定的竞价方式，可操作性很强，现阶段很多互联网广告平台都采用这种竞价方式。但GSP的不足之处在于，竞价的结果不一定是全局最优化的，于是VCG竞价算法出现了。</p>

<p><strong>VCG</strong></p>

<p>基本原理就是广告主为参加拍卖过程中给别的广告主带来的损失之和来买单定价。</p>

<p>举例说明：</p>

<table>
<thead>
<tr>
<th align="center">广告位</th>
<th align="center">平均每小时点击量</th>
<th align="center">广告主</th>
<th align="center">出价（CPC）</th>
</tr>
</thead>

<tbody>
<tr>
<td align="center">1</td>
<td align="center">200</td>
<td align="center">A</td>
<td align="center">10</td>
</tr>

<tr>
<td align="center">2</td>
<td align="center">100</td>
<td align="center">B</td>
<td align="center">4</td>
</tr>

<tr>
<td align="center">null</td>
<td align="center">null</td>
<td align="center">C</td>
<td align="center">2</td>
</tr>
</tbody>
</table>

<p>A不参加竞价，B和C的总费用为<span  class="math">\(4\times200+2\times100=1000\)</span>。</p>

<p>A参加竞价，B和C的总费用为<span  class="math">\(4\times1+2\times0=400\)</span>。</p>

<p>由于A的参与，导致B和C一共损失了600。</p>

<p>最终，A的每次点击支付金额为<span  class="math">\(600\div200=3\)</span>。</p>

<p><strong>Pacing系统</strong></p>

<p>Pacing系统是广告系统中控制预算或投放最大化的一个算法。</p>

<p>Google Adwords设定好预算和最高出价，Adwords会自动调节出价，让广告主在限定的时间内获取最多的点击，通过调节出价，获得最大的ROI。其实是在控制平均成本。</p>

<p>Facebook广告的Pacing系统更注重长期和总体价值的创造，在竞争较为激烈的环境下，起量较慢。Facebook平台内每天有很多广告投放机会，其中某些投放机会的花费相对更高。因此，在广告的整个投放期间，费用并非一成不变。排期机制考虑到了这样的变化，通过掌控预算使用速率，寻找最佳的机会以最低的价格向用户展示广告，来提高广告主的价值。默认情况下，Facebook会在一天内向目标受众均匀地展示你的广告。</p>

<p>举例说明：</p>

<p>某广告主现在推广一款产品，每天预算$10，以CPC计费，假设每次广告点击能产生$5的收益。</p>

<p>情况一：当没有Pacing算法的时候
<center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-8c70fe5d80e9d397c083efaa5a2ce0cd_1440w.jpg" alt=""></figure></center></p>

<p>上图蓝色点表示广告获得展示机会，黄色表示广告赢得展示机会，红线代表出价价格。</p>

<p>广告总花费 = $10。</p>

<p>广告点击总价值 = $30。</p>

<p>预算 = $10.</p>

<p>广告总收益 = $20。</p>

<p>这种模式下，广告预算会在一开始就被消耗殆尽，前期竞争激烈，后期没有竞争，形成资源浪费。</p>

<p>情况二：出价过低
<center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-f6bc68887876fee22dff4e894e34ed57_1440w.jpg" alt=""></figure></center></p>

<p>广告总花费 = $4。</p>

<p>广告点击总价值 = $20。</p>

<p>预算 = $10.</p>

<p>广告总收益 = $16。</p>

<p>这种模式就是追求最低的点击价格，会导致广告主的预算没用完，广告效果也不好。</p>

<p>情况三：Pacing算法下的均衡状态
<center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-e10053a3ed6ad061fbf124e467704c8d_r.jpg" alt=""></figure></center></p>

<p>广告总花费 = $10。</p>

<p>广告点击总价值 = $35。</p>

<p>预算 = $10.</p>

<p>广告总收益 = $25。</p>

<p>这种模式下，广告客户获得了最大的点击数，获取了最大的利益，同时用完了每日预算。</p>

<p>从上面例子中，当我们在整段时间内使用稳定的出价（Pacing），广告主的价值相比没有Pacing或者出价过高过低，得到了最大化。为了实现目标，Pacing期望通过学习其他的有同样目标用户的竞争广告，提出一个优化的竞价。</p>

<p><strong>自动出价系统</strong></p>

<p>Google Adwords系统中，同一广告主可以选择多条广告平均展示。</p>

<p>Facebook广告中，如果同一账户下有多个广告指向同一个目标，那么系统会选择一个（半随机）进行出价，屏蔽未被选中的广告的出价。</p>

<p><strong>BB Part</strong></p>

<p>Google和Facebook拥有世界上最先进的系统，很难说这两种竞价方式的好坏。在大多数模块上，Google和Facebook的实现其实从结果来看会发现惊人的相似，差异更多是来自于产品本身的不同。</p>
]]></content>
        </item>
        
        <item>
            <title>Entertainment Industry Development</title>
            <link>https://www.marshalgao.com/entertainment-industry-development/</link>
            <pubDate>Mon, 11 Jan 2021 13:50:25 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/entertainment-industry-development/</guid>
            <description>文娱行业发展概况
 受疫情和移动互联网的影响，文娱行业现为线上、线下结合的模式 文娱行业前景可观，主要集中在内容上  发展因素及趋势概况
 利好政策的扶持 中国文娱行业进入资本寒冬  从数据上看，总投资金额在减少，投资项目数量也在减少   平均单笔融资金额快速上升  从数据上看，虽然总投资金额在减少，但是单笔投资金额在逐年上升 对于大IP等头部内容，备受青睐   战略投资和并购占比高  意味着更多的投资公司不愿意再冒风险去投资小IP  但对于互联网企业除外  资金足够多 为了自家整体生态布局     战略投资和并购的提高，意味着头部项目更吃香  容易造成文娱领域的马太效应     从全国城市文娱行业的融资数据来看，北京成为文娱行业投融资的主战场 媒体、游戏成为投资热门  从数据看，两者占比最大   CVC机构活跃  CVC  CVC是一种创新的投资组织形式，指的是企业通过其设立专业的投资机构，或战略投资部门对外进行直接投资，起源于20世纪60年代的美国   2019年投资项目数量TOP10中，有7家CVC  基本都是互联网企业     文娱类独角兽估值高  虽然数量少，但是足够吸金 诸如笑果文化等新文娱企业的崛起   大量的融资并购  融资大多涵盖互联网企业 并购方基本为传统文娱企业    原文链接</description>
            <content type="html"><![CDATA[<p><strong>文娱行业发展概况</strong></p>
<ul>
<li>受疫情和移动互联网的影响，文娱行业现为线上、线下结合的模式</li>
<li>文娱行业前景可观，主要集中在内容上</li>
</ul>
<p><strong>发展因素及趋势概况</strong></p>
<ul>
<li>利好政策的扶持</li>
<li>中国文娱行业进入资本寒冬
<ul>
<li>从数据上看，总投资金额在减少，投资项目数量也在减少</li>
</ul>
</li>
<li>平均单笔融资金额快速上升
<ul>
<li>从数据上看，虽然总投资金额在减少，但是单笔投资金额在逐年上升</li>
<li>对于大IP等头部内容，备受青睐</li>
</ul>
</li>
<li>战略投资和并购占比高
<ul>
<li>意味着更多的投资公司不愿意再冒风险去投资小IP
<ul>
<li>但对于互联网企业除外
<ul>
<li>资金足够多</li>
<li>为了自家整体生态布局</li>
</ul>
</li>
</ul>
</li>
<li>战略投资和并购的提高，意味着头部项目更吃香
<ul>
<li>容易造成文娱领域的马太效应</li>
</ul>
</li>
</ul>
</li>
<li>从全国城市文娱行业的融资数据来看，北京成为文娱行业投融资的主战场</li>
<li>媒体、游戏成为投资热门
<ul>
<li>从数据看，两者占比最大</li>
</ul>
</li>
<li>CVC机构活跃
<ul>
<li>CVC
<ul>
<li>CVC是一种创新的投资组织形式，指的是企业通过其设立专业的投资机构，或战略投资部门对外进行直接投资，起源于20世纪60年代的美国</li>
</ul>
</li>
<li>2019年投资项目数量TOP10中，有7家CVC
<ul>
<li>基本都是互联网企业</li>
</ul>
</li>
</ul>
</li>
<li>文娱类独角兽估值高
<ul>
<li>虽然数量少，但是足够吸金</li>
<li>诸如笑果文化等新文娱企业的崛起</li>
</ul>
</li>
<li>大量的融资并购
<ul>
<li>融资大多涵盖互联网企业</li>
<li>并购方基本为传统文娱企业</li>
</ul>
</li>
</ul>
<p><strong>原文链接</strong></p>
<ul>
<li><a href="https://bg.qianzhan.com/trends/detail/506/200921-7da74f1f.html">2020年中国文娱行业投融资现状及发展前景分析 内容创作领域将成未来投资重点领域</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[181] Employees Earning More Than Their Managers</title>
            <link>https://www.marshalgao.com/leetcode181-employees-earning-more-than-their-managers/</link>
            <pubDate>Mon, 11 Jan 2021 12:14:21 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode181-employees-earning-more-than-their-managers/</guid>
            <description>Question The Employee table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager Id.
+----+-------+--------+-----------+ | Id | Name | Salary | ManagerId | +----+-------+--------+-----------+ | 1 | Joe | 70000 | 3 | | 2 | Henry | 80000 | 4 | | 3 | Sam | 60000 | NULL | | 4 | Max | 90000 | NULL | +----+-------+--------+-----------+  Given the Employee table, write a SQL query that finds out employees who earn more than their managers.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>The Employee table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager Id.</p>
<pre><code>+----+-------+--------+-----------+
| Id | Name  | Salary | ManagerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | NULL      |
| 4  | Max   | 90000  | NULL      |
+----+-------+--------+-----------+
</code></pre>
<p>Given the Employee table, write a SQL query that finds out employees who earn more than their managers. For the above table, Joe is the only employee who earns more than his manager.</p>
<pre><code>+----------+
| Employee |
+----------+
| Joe      |
+----------+
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Employee (Id int, Name varchar(<span style="color:#ae81ff">255</span>), Salary int, ManagerId int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Employee
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, ManagerId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;Joe&#39;</span>, <span style="color:#e6db74">&#39;70000&#39;</span>, <span style="color:#e6db74">&#39;3&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, ManagerId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;Henry&#39;</span>, <span style="color:#e6db74">&#39;80000&#39;</span>, <span style="color:#e6db74">&#39;4&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, ManagerId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;Sam&#39;</span>, <span style="color:#e6db74">&#39;60000&#39;</span>, <span style="color:#e6db74">&#39;None&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Name, Salary, ManagerId) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;Max&#39;</span>, <span style="color:#e6db74">&#39;90000&#39;</span>, <span style="color:#e6db74">&#39;None&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> origin.Name <span style="color:#66d9ef">as</span> Employee
<span style="color:#66d9ef">from</span> Employee <span style="color:#66d9ef">as</span> origin
<span style="color:#66d9ef">inner</span> <span style="color:#66d9ef">join</span> Employee <span style="color:#66d9ef">as</span> temp
<span style="color:#66d9ef">on</span> origin.ManagerId <span style="color:#f92672">=</span> temp.Id
<span style="color:#66d9ef">where</span> origin.Salary <span style="color:#f92672">&gt;</span> temp.Salary
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>For this question, because you only have one table, you can use &ldquo;inner join&rdquo; to combine the same table twice accoring to the &ldquo;MangerId&rdquo; and &ldquo;Id&rdquo;. Then you can just compare the value of &ldquo;Salary&rdquo; is ok.</p>
<p>More importantly, the new table contains all the keys twice, so I suggest you can use &ldquo;as&rdquo; to distinguish these two tables, which can make &ldquo;select&rdquo; more conveniently.</p>
<p>Also, there is a useful links, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/wgphp/p/8183812.html">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[180] Consecutive Numbers</title>
            <link>https://www.marshalgao.com/leetcode180-consecutive-numbers/</link>
            <pubDate>Mon, 11 Jan 2021 11:20:40 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode180-consecutive-numbers/</guid>
            <description>Question Table: Logs
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | num | varchar | +-------------+---------+ id is the primary key for this table.  Write an SQL query to find all numbers that appear at least three times consecutively.
Return the result table in any order.
The query result format is in the following example:
Logs table: +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ Result table: +-----------------+ | ConsecutiveNums | +-----------------+ | 1 | +-----------------+ 1 is the only number that appears consecutively for at least three times.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Table: Logs</p>
<pre><code>+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| num         | varchar |
+-------------+---------+
id is the primary key for this table.
</code></pre>
<p>Write an SQL query to find all numbers that appear at least three times consecutively.</p>
<p>Return the result table in <strong>any order</strong>.</p>
<p>The query result format is in the following example:</p>
<pre><code>Logs table:
+----+-----+
| Id | Num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+

Result table:   
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+
1 is the only number that appears consecutively for at least three times.
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Logs (Id int, Num int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Logs
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Logs (Id, Num) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Logs (Id, Num) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Logs (Id, Num) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Logs (Id, Num) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Logs (Id, Num) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;1&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Logs (Id, Num) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Logs (Id, Num) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;7&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> <span style="color:#66d9ef">distinct</span> Num <span style="color:#66d9ef">as</span> ConsecutiveNums
<span style="color:#66d9ef">from</span> (
    <span style="color:#66d9ef">select</span> lag(Num) over() <span style="color:#66d9ef">as</span> preNum,
        Num,
        lead(Num) over() <span style="color:#66d9ef">as</span> nextNum
    <span style="color:#66d9ef">from</span> Logs
) temp
<span style="color:#66d9ef">where</span> preNum <span style="color:#f92672">=</span> Num <span style="color:#66d9ef">and</span> Num <span style="color:#f92672">=</span> nextNum
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>For this question, if you want to find a number that appears consecutively for at least three times, you can find each number&rsquo;s previous number and next number, using &ldquo;lag over&rdquo; and &ldquo;lead over&rdquo;. Then put them into one line.</p>
<p>According to the requirement, if the new table - &ldquo;temp&rdquo; - has at least one line that all elements are equal, it can address the problem. More importantly, you may have the same result, and do not forget to use &ldquo;distinct&rdquo; to address the problem.</p>
<p>Also, there are three useful links, and I think they can help you. (chinese version)</p>
<ul>
<li><a href="https://www.jb51.net/article/152155.htm">useful link 1</a></li>
<li><a href="https://www.cnblogs.com/beautifuldata/p/3204294.html">useful link 2</a></li>
<li><a href="https://blog.csdn.net/sinat_26811377/article/details/107188400">useful link 3</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Content Products</title>
            <link>https://www.marshalgao.com/content-products/</link>
            <pubDate>Sat, 09 Jan 2021 22:33:41 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/content-products/</guid>
            <description>内容型产品
 定义  通过内容聚集用户，形成流量平台 用户主要是进行内容消费，消磨时间   举例  新闻资讯类：网易新闻、今日头条、微信公众号 社交类：微博、知乎、豆瓣 内容电商类：什么值得买、小红书 影音娱乐类：腾讯视频、QQ音乐   内容的生产方式  分发型（PGC）  产品模式  以媒体资讯类为主，例如：今日头条 平台签约创作者，吸引内容消费者，实现流量平台搭建 头部MCN会优先推荐 流量积累速度快，起步快 关系沉淀弱，创作者对观众的单向关系，观众难以转化为创作者 除了解决内容增长之外，还需要增加用户、内容以及用户之间的互动（社交属性）-&amp;gt; 提升用户粘性   业务划分（以新闻资讯类为例）  推荐分发  通过订阅、个性化推荐将内容分发给用户   跟帖互动  社交属性，增强用户粘性   内容后台  自媒体管理，审核与质量评级，建立内容库的基础   用户增长  拉新和留存   商业变现  广告、知识付费     变现模式  创作者变现  平台补贴刺激生产内容 知识付费收入分成 流量主收入 沉淀粉丝其他渠道变现   平台变现  广告变现  例如：今日头条、网易新闻   内容IP-知识付费  订阅付费：先付费再消费，例如：得到 打赏付费：先消费再付费，例如：微信公众号   购买会员  满足用户跳过广告的需求，例如：腾讯视频          社区型（UGC）  产品模式  通过内容聚集相同兴趣或调性的用户，以引导用户创作内容为主导，通过内容发现人，强调关系链的搭建与互动，以及社区内容的调性维护，例如：抖音，小红书 社区中，用户群体关系通常呈现为金字塔结构  大V和KOL 腰部中小V 尝鲜小白和社区普通用户    UGC产品起步如果采取单纯UGC的模式会产生大量的“内容噪音”，因此一般来说会先从头部KOL开始产生内容进行输出（个人理解是PGC的方式），后期发展需要打造社区氛围 UGC与PGC相比，天花板更高，迁移成本提高，用户留存高（因为社区的形成）   业务划分  发布工具  降低内容创作门槛，提高创作趣味性   KOL扶植  提升KOL的on boarding体验   互动关系  打造关系链，创建社区   内容分发  通过内容聚集相同属性的用户   用户增长  新增和留存   商业变现  广告、电商      变现模式  创作者变现  平台补贴刺激生产内容 沉淀粉丝其他渠道转化变现 带货收入分成   平台变现  电商  自建电商，例如：小红书 导流电商，例如：抖音   广告变现  与PGC的广告模式类似，例如：知乎的信息流广告            快速设计内容发现</description>
            <content type="html"><![CDATA[<p><strong>内容型产品</strong></p>
<ul>
<li>定义
<ul>
<li>通过内容聚集用户，形成流量平台</li>
<li>用户主要是进行内容消费，消磨时间</li>
</ul>
</li>
<li>举例
<ul>
<li>新闻资讯类：网易新闻、今日头条、微信公众号</li>
<li>社交类：微博、知乎、豆瓣</li>
<li>内容电商类：什么值得买、小红书</li>
<li>影音娱乐类：腾讯视频、QQ音乐</li>
</ul>
</li>
<li>内容的生产方式
<ul>
<li>分发型（PGC）
<ul>
<li>产品模式
<ul>
<li>以媒体资讯类为主，例如：今日头条</li>
<li>平台签约创作者，吸引内容消费者，实现流量平台搭建</li>
<li>头部MCN会优先推荐</li>
<li>流量积累速度快，起步快</li>
<li>关系沉淀弱，创作者对观众的单向关系，观众难以转化为创作者</li>
<li>除了解决内容增长之外，还需要增加用户、内容以及用户之间的互动（社交属性）-&gt; 提升用户粘性</li>
</ul>
</li>
<li>业务划分（以新闻资讯类为例）
<ul>
<li>推荐分发
<ul>
<li>通过订阅、个性化推荐将内容分发给用户</li>
</ul>
</li>
<li>跟帖互动
<ul>
<li>社交属性，增强用户粘性</li>
</ul>
</li>
<li>内容后台
<ul>
<li>自媒体管理，审核与质量评级，建立内容库的基础</li>
</ul>
</li>
<li>用户增长
<ul>
<li>拉新和留存</li>
</ul>
</li>
<li>商业变现
<ul>
<li>广告、知识付费</li>
</ul>
</li>
</ul>
</li>
<li>变现模式
<ul>
<li>创作者变现
<ul>
<li>平台补贴刺激生产内容</li>
<li>知识付费收入分成</li>
<li>流量主收入</li>
<li>沉淀粉丝其他渠道变现</li>
</ul>
</li>
<li>平台变现
<ul>
<li>广告变现
<ul>
<li>例如：今日头条、网易新闻</li>
</ul>
</li>
<li>内容IP-知识付费
<ul>
<li>订阅付费：先付费再消费，例如：得到</li>
<li>打赏付费：先消费再付费，例如：微信公众号</li>
</ul>
</li>
<li>购买会员
<ul>
<li>满足用户跳过广告的需求，例如：腾讯视频
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/VsQP8Inpdq6x8CmYLJE9.png" alt=""></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>社区型（UGC）
<ul>
<li>产品模式
<ul>
<li>通过内容聚集相同兴趣或调性的用户，以引导用户创作内容为主导，通过内容发现人，强调关系链的搭建与互动，以及社区内容的调性维护，例如：抖音，小红书</li>
<li>社区中，用户群体关系通常呈现为金字塔结构
<ul>
<li>大V和KOL</li>
<li>腰部中小V</li>
<li>尝鲜小白和社区普通用户
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/vV9z6cKlJXBFqBqHT51D.jpg" alt=""></li>
</ul>
</li>
<li>UGC产品起步如果采取单纯UGC的模式会产生大量的“内容噪音”，因此一般来说会先从头部KOL开始产生内容进行输出（个人理解是PGC的方式），后期发展需要打造社区氛围</li>
<li>UGC与PGC相比，天花板更高，迁移成本提高，用户留存高（因为社区的形成）</li>
</ul>
</li>
<li>业务划分
<ul>
<li>发布工具
<ul>
<li>降低内容创作门槛，提高创作趣味性</li>
</ul>
</li>
<li>KOL扶植
<ul>
<li>提升KOL的on boarding体验</li>
</ul>
</li>
<li>互动关系
<ul>
<li>打造关系链，创建社区</li>
</ul>
</li>
<li>内容分发
<ul>
<li>通过内容聚集相同属性的用户</li>
</ul>
</li>
<li>用户增长
<ul>
<li>新增和留存</li>
</ul>
</li>
<li>商业变现
<ul>
<li>广告、电商
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/2wdBCXyD8VaU851jULvL.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>变现模式
<ul>
<li>创作者变现
<ul>
<li>平台补贴刺激生产内容</li>
<li>沉淀粉丝其他渠道转化变现</li>
<li>带货收入分成</li>
</ul>
</li>
<li>平台变现
<ul>
<li>电商
<ul>
<li>自建电商，例如：小红书</li>
<li>导流电商，例如：抖音</li>
</ul>
</li>
<li>广告变现
<ul>
<li>与PGC的广告模式类似，例如：知乎的信息流广告</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>快速设计内容发现</strong></p>
<ul>
<li>用户对获取内容的不同需求
<ul>
<li>随便看看型 -&gt; 推荐
<ul>
<li>打发时间的用户</li>
</ul>
</li>
<li>部分倾向型 -&gt; 发现
<ul>
<li>打发时间，但是比较喜欢某一类的内容</li>
<li>采用分类、主题等方式进行推荐</li>
</ul>
</li>
<li>明确目标型 -&gt; 搜索
<ul>
<li>这一类用户相对不多</li>
</ul>
</li>
</ul>
</li>
<li>内容推荐方式
<ul>
<li>个性化推荐
<ul>
<li>通过用户画像</li>
<li>两个条件
<ul>
<li>条目达到一定数量级且增长相对稳定，例如：曲库
<ul>
<li>目的是为了将长尾内容挖掘并分发</li>
<li>只有数据足够丰富才适用推荐系统</li>
</ul>
</li>
<li>具有媒体性的产品</li>
</ul>
</li>
<li>例如：今日头条</li>
</ul>
</li>
<li>附近推荐
<ul>
<li>根据地理位置来推荐内容</li>
</ul>
</li>
<li>热门推荐
<ul>
<li>根据浏览量、点赞、收藏、CTR数据推荐热门内容</li>
<li>为了避免热门内容长期排序在前面，还会设置一段比较短的时间计算热门内容，如每日热门推荐，或者浏览量、点赞等互动数据会随着时间进行权重衰减</li>
</ul>
</li>
<li>最新推荐
<ul>
<li>最新上传的内容，一般用来提升新内容曝光</li>
</ul>
</li>
<li>精选推荐
<ul>
<li>人工筛选优质内容推荐</li>
</ul>
</li>
<li>订阅/关注
<ul>
<li>推荐内容关注的资讯账号或创作者更新的内容</li>
</ul>
</li>
</ul>
</li>
<li>内容组织形式
<ul>
<li>根据频道聚合</li>
<li>根据更新动态聚合</li>
<li>根据话题/TAG聚合</li>
<li>根据活动聚合</li>
<li>根据专题聚合</li>
<li>根据媒体号/创作者聚合</li>
<li>根据评论聚合</li>
</ul>
</li>
<li>“元素组合式”设计方法
<ul>
<li>订阅+创作者，例如：西瓜视频</li>
<li>热门+评论，例如：网易云音乐</li>
<li>最新+专题，例如：网易严选</li>
<li>这种理论方式，对开阔思路是有极大好处的
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/640_%E5%89%AF%E6%9C%AC.png" alt=""></li>
</ul>
</li>
</ul>
<p><strong>从微信「好看」看社交与内容分发</strong></p>
<ul>
<li>从内容消费端来说
<ul>
<li>微信朋友圈的信息碎化，而且由于微商、标题党的出现导致优质内容很难被发现</li>
<li>「好看」其实就是一种转发，但是为什么不直接做成转发？
<ul>
<li>「好看」
<ul>
<li>觉得文章不错或非付费性质的支持和喜欢作者，不足以引发传播，但又不希望频繁打扰别人的时间线</li>
</ul>
</li>
<li>转发
<ul>
<li>对文章强烈赞同，希望出现在时间线上，朋友能看到并和自己讨论，表达自己的观点</li>
</ul>
</li>
</ul>
</li>
<li>微信的社交内容阅读传播分成了两条线
<ul>
<li>以朋友圈里社交关系为主的动态分享</li>
<li>看一看里基于“好看”推荐的纯内容信息</li>
</ul>
</li>
<li>「好看」是一种社交分发（社交推荐），而「精选」是传统意义上的热门推荐或个性化推荐</li>
<li>「好看」的推荐机制是基于社交属性的，媒体属性与社交属性的内容分发完全不同，好比开演唱会和开party</li>
</ul>
</li>
<li>从创作端来说
<ul>
<li>自2017年后，微信公共号获取流量就变得异常困难</li>
<li>出现收藏超过转发的情况</li>
<li>「好看」的出现其实在一定程度上鼓励优质内容的产出，少做标题党</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[178] Rank Scores</title>
            <link>https://www.marshalgao.com/leetcode178-rank-scores/</link>
            <pubDate>Sat, 09 Jan 2021 16:18:31 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode178-rank-scores/</guid>
            <description>Question Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ranking. Note that after a tie, the next ranking number should be the next consecutive integer value. In other words, there should be no &amp;ldquo;holes&amp;rdquo; between ranks.
+----+-------+ | Id | Score | +----+-------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 | | 4 | 3.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ranking. Note that after a tie, the next ranking number should be the next consecutive integer value. In other words, there should be no &ldquo;holes&rdquo; between ranks.</p>
<pre><code>+----+-------+
| Id | Score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+
</code></pre>
<p>For example, given the above Scores table, your query should generate the following report (order by highest score):</p>
<pre><code>+-------+---------+
| score | Rank    |
+-------+---------+
| 4.00  | 1       |
| 4.00  | 1       |
| 3.85  | 2       |
| 3.65  | 3       |
| 3.65  | 3       |
| 3.50  | 4       |
+-------+---------+
</code></pre>
<p><strong>Important Note:</strong> For MySQL solutions, to escape reserved words used as column names, you can use an apostrophe before and after the keyword. For example <strong>&lsquo;Rank&rsquo;</strong>.</p>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Scores (Id int, Score DECIMAL(<span style="color:#ae81ff">3</span>,<span style="color:#ae81ff">2</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Scores
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Scores (Id, Score) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;3.5&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Scores (Id, Score) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;3.65&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Scores (Id, Score) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;4.0&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Scores (Id, Score) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;4&#39;</span>, <span style="color:#e6db74">&#39;3.85&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Scores (Id, Score) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;5&#39;</span>, <span style="color:#e6db74">&#39;4.0&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Scores (Id, Score) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;6&#39;</span>, <span style="color:#e6db74">&#39;3.65&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> Score, dense_rank() over(<span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> Score <span style="color:#66d9ef">desc</span>) <span style="color:#66d9ef">as</span> <span style="color:#e6db74">&#39;Rank&#39;</span>
<span style="color:#66d9ef">from</span> Scores
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>For this question, we should rank the socres and then use &ldquo;dense_rank()&rdquo; to index the score according to the question.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/lizongyan/p/13820701.htmlx">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[177] Nth Highest Salary</title>
            <link>https://www.marshalgao.com/leetcode177-nth-highest-salary/</link>
            <pubDate>Sat, 09 Jan 2021 16:06:13 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode177-nth-highest-salary/</guid>
            <description>Question Write a SQL query to get the nth highest salary from the Employee table.
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+  For example, given the above Employee table, the nth highest salary where n = 2 is 200. If there is no nth highest salary, then the query should return null.
+------------------------+ | getNthHighestSalary(2) | +------------------------+ | 200 | +------------------------+  My Interesting Code CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN set N = N - 1; RETURN ( select distinct Salary as getNthHighestSalary from Employee order by Salary desc limit N, 1 ); END My Perspective For this question, firstly, you can order the salary.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Write a SQL query to get the nth highest salary from the Employee table.</p>
<pre><code>+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
</code></pre>
<p>For example, given the above Employee table, the nth highest salary where n = 2 is 200. If there is no nth highest salary, then the query should return null.</p>
<pre><code>+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+
</code></pre>
<h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">FUNCTION</span> getNthHighestSalary(N INT) <span style="color:#66d9ef">RETURNS</span> INT
<span style="color:#66d9ef">BEGIN</span>
  <span style="color:#66d9ef">set</span> N <span style="color:#f92672">=</span> N <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span>;
  <span style="color:#66d9ef">RETURN</span> (
      <span style="color:#66d9ef">select</span> <span style="color:#66d9ef">distinct</span> Salary <span style="color:#66d9ef">as</span> getNthHighestSalary
      <span style="color:#66d9ef">from</span> Employee 
      <span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> Salary <span style="color:#66d9ef">desc</span>
      <span style="color:#66d9ef">limit</span> N, <span style="color:#ae81ff">1</span>
  );
<span style="color:#66d9ef">END</span>
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>For this question, firstly, you can order the salary. Then using &ldquo;limit&rdquo; to get the result. By the way, &ldquo;limit N, 1&rdquo; means that you pass the first N values, and get the next one value.</p>
<p>This question is not pretty difficult, but it also consumed much time. I was confused by the value of N. In fact, the value of N in &ldquo;limit N, 1&rdquo; is N - 1, but how to deal with this? You can use &ldquo;set N = N - 1&rdquo; before the &ldquo;RETURN&rdquo;.</p>
<p>Also, there are two useful links, and I think they can help you. (chinese version)</p>
<ul>
<li><a href="https://www.runoob.com/sql/sql-orderby.html">useful link 1</a></li>
<li><a href="https://blog.csdn.net/csdn265/article/details/80387342">useful link 2</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>The Needs and Development of Internet Advertising</title>
            <link>https://www.marshalgao.com/the-needs-and-development-of-internet-advertising/</link>
            <pubDate>Fri, 08 Jan 2021 17:35:12 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/the-needs-and-development-of-internet-advertising/</guid>
            <description>纵观互联网广告行业的发展历程
 门户时代互联网广告（广告主仍然偏爱传统流量） 搜索广告的出现 （比如谷歌、百度、阿里妈妈） 信息流广告的革命性改变（比如Facebook，今日头条，腾讯社交广告）  以广告主、媒体方的发展及需求为主线，理解行业的发展变化
 持续面临的问题  广告主  更愿意为效果付费，而非展现 期望更精准地获得流量 不知怎么更好地做投放决策   媒体方  大媒体及小媒体都希望尽可能卖出更多流量 媒体需要提高单个流量的变现效率 媒体期望降低链条的交易成本     基于面临问题进行的行业转变  由仅支持按曝光计费变为可选择按效果计费  早期以CPT、CPM等曝光类方式计费 搜索引擎率先推出了按点击付费的方式  平衡广告主和媒体的利益 媒体侧重给广告更多有效的点击 广告主负责将点击转化   按转化计费方式的出现（由于落地页由媒体方提供和负责，其很难监控转化数据、优化转化效率，所以推出这种计费方式的媒体不多）  填写表单 下单 下载等     由粗糙的定向投放变为精细化定向投放  人物画像的出现 定向采买的实现 DMP对数据的高度整合，使广告被投向不同的媒体平台 近些年，也会通过广告与用户的互动来实现召回，减少不必要的曝光   小媒体由不能获益变为能获得广告收益  早期卖的流量比较粗，只有大的媒体和核心广告位比较抢手 越来越多的小媒体拥有小流量，单看流量自身，其对广告主是十分有价值的 整合大小媒体，出现了广告联盟  大媒体可以正常获客 小媒体可以售卖自身流量 广告主可以获得更多的有效流量，且没有增加成本     由提前锁定部分媒体的流量资源，变为实时竞价多个媒体的流量资源  互联网广告早期的交易方式是广告主提前出价，与媒体约定采买的量，媒体预留展示机会给广告主  对于广告主，他们期望在媒体选择、预算分配及出价方案上有一定的灵活性，也期望能降低决策成本、同时让购买的流量尽可能多地有价值 对于媒体方，这种方式容易让其错失一些更愿意出高价的潜在客户，也容易在流量波动的情况下不能灵活调整售卖策略，同时中小媒体在前述方式下也难获得交易机会   实时竞价的出现  将每个流量视作独立的售卖单位 可以单独售卖、多人竞价、实时交易 实现方式  DSP、SSP、ADX、DMP的结合 SSP是为媒体方服务的，负责和ADX对接，接入SSP的媒体，在广告位有单个流量到来时，可发起广告请求，向ADX询问是否有合适的广告可展现 ADX是为DSP和SSP服务的，起到衔接、匹配的作用，它接收到SSP的请求后，将广告流量信息传递给DSP，询问它们的出价，DSP响应后返回相应的广告创意及出价 DSP是为广告主服务的，负责和ADX对接，若干广告主将预算、创意、出价、流量要求等提交给DSP，DSP负责具体投放决策 DMP提供数据服务，帮助广告主更准确地了解每个流量，帮助其决策       由按流量统一出价变为按流量差异化出价  主要针对的是点击计费的场景 按照传统的点击计费逻辑，广告主为每个点击付出的成本大体是相近的 追求效果的广告主通常按下载、填写表单等实际转化来核算成本 由于每个点击的实际转化率波动大、再加上客户在短时间获得的点击量较小，这就导致按上述计费方式换算的转化成本不稳定，客户的成本和预算不太可控，安全感较低 由于出价是固定的，对于那些转化率更高的流量，客户没办法在控制总预算的前提下临时调整出价以竞争到展现广告的机会 oCPC的诞生  客户设定转化出价（例如一个下载平均20元），对于每一个流量，系统可根据预估的转化率调整点击出价，使转化成本相对稳定 按照这个逻辑，系统可对预估转化率高的流量提高出价，预估转化率低流量降低出价        </description>
            <content type="html"><![CDATA[<p><strong>纵观互联网广告行业的发展历程</strong></p>
<ul>
<li>门户时代互联网广告（广告主仍然偏爱传统流量）</li>
<li>搜索广告的出现 （比如谷歌、百度、阿里妈妈）</li>
<li>信息流广告的革命性改变（比如Facebook，今日头条，腾讯社交广告）</li>
</ul>
<p><strong>以广告主、媒体方的发展及需求为主线，理解行业的发展变化</strong></p>
<ul>
<li>持续面临的问题
<ul>
<li>广告主
<ul>
<li>更愿意为效果付费，而非展现</li>
<li>期望更精准地获得流量</li>
<li>不知怎么更好地做投放决策</li>
</ul>
</li>
<li>媒体方
<ul>
<li>大媒体及小媒体都希望尽可能卖出更多流量</li>
<li>媒体需要提高单个流量的变现效率</li>
<li>媒体期望降低链条的交易成本</li>
</ul>
</li>
</ul>
</li>
<li>基于面临问题进行的行业转变
<ul>
<li>由仅支持按曝光计费变为可选择按效果计费
<ul>
<li>早期以CPT、CPM等曝光类方式计费</li>
<li>搜索引擎率先推出了按点击付费的方式
<ul>
<li>平衡广告主和媒体的利益</li>
<li>媒体侧重给广告更多有效的点击</li>
<li>广告主负责将点击转化</li>
</ul>
</li>
<li>按转化计费方式的出现（由于落地页由媒体方提供和负责，其很难监控转化数据、优化转化效率，所以推出这种计费方式的媒体不多）
<ul>
<li>填写表单</li>
<li>下单</li>
<li>下载等</li>
</ul>
</li>
</ul>
</li>
<li>由粗糙的定向投放变为精细化定向投放
<ul>
<li>人物画像的出现</li>
<li>定向采买的实现</li>
<li>DMP对数据的高度整合，使广告被投向不同的媒体平台</li>
<li>近些年，也会通过广告与用户的互动来实现召回，减少不必要的曝光</li>
</ul>
</li>
<li>小媒体由不能获益变为能获得广告收益
<ul>
<li>早期卖的流量比较粗，只有大的媒体和核心广告位比较抢手</li>
<li>越来越多的小媒体拥有小流量，单看流量自身，其对广告主是十分有价值的</li>
<li>整合大小媒体，出现了广告联盟
<ul>
<li>大媒体可以正常获客</li>
<li>小媒体可以售卖自身流量</li>
<li>广告主可以获得更多的有效流量，且没有增加成本</li>
</ul>
</li>
</ul>
</li>
<li>由提前锁定部分媒体的流量资源，变为实时竞价多个媒体的流量资源
<ul>
<li>互联网广告早期的交易方式是广告主提前出价，与媒体约定采买的量，媒体预留展示机会给广告主
<ul>
<li>对于广告主，他们期望在媒体选择、预算分配及出价方案上有一定的灵活性，也期望能降低决策成本、同时让购买的流量尽可能多地有价值</li>
<li>对于媒体方，这种方式容易让其错失一些更愿意出高价的潜在客户，也容易在流量波动的情况下不能灵活调整售卖策略，同时中小媒体在前述方式下也难获得交易机会</li>
</ul>
</li>
<li>实时竞价的出现
<ul>
<li>将每个流量视作独立的售卖单位</li>
<li>可以单独售卖、多人竞价、实时交易</li>
<li>实现方式
<ul>
<li>DSP、SSP、ADX、DMP的结合</li>
<li>SSP是为媒体方服务的，负责和ADX对接，接入SSP的媒体，在广告位有单个流量到来时，可发起广告请求，向ADX询问是否有合适的广告可展现</li>
<li>ADX是为DSP和SSP服务的，起到衔接、匹配的作用，它接收到SSP的请求后，将广告流量信息传递给DSP，询问它们的出价，DSP响应后返回相应的广告创意及出价</li>
<li>DSP是为广告主服务的，负责和ADX对接，若干广告主将预算、创意、出价、流量要求等提交给DSP，DSP负责具体投放决策</li>
<li>DMP提供数据服务，帮助广告主更准确地了解每个流量，帮助其决策</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>由按流量统一出价变为按流量差异化出价
<ul>
<li>主要针对的是点击计费的场景</li>
<li>按照传统的点击计费逻辑，广告主为每个点击付出的成本大体是相近的</li>
<li>追求效果的广告主通常按下载、填写表单等实际转化来核算成本</li>
<li>由于每个点击的实际转化率波动大、再加上客户在短时间获得的点击量较小，这就导致按上述计费方式换算的转化成本不稳定，客户的成本和预算不太可控，安全感较低</li>
<li>由于出价是固定的，对于那些转化率更高的流量，客户没办法在控制总预算的前提下临时调整出价以竞争到展现广告的机会</li>
<li>oCPC的诞生
<ul>
<li>客户设定转化出价（例如一个下载平均20元），对于每一个流量，系统可根据预估的转化率调整点击出价，使转化成本相对稳定</li>
<li>按照这个逻辑，系统可对预估转化率高的流量提高出价，预估转化率低流量降低出价</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[176] Second Highest Salary</title>
            <link>https://www.marshalgao.com/leetcode176-second-highest-salary/</link>
            <pubDate>Fri, 08 Jan 2021 16:37:07 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode176-second-highest-salary/</guid>
            <description>Question Write a SQL query to get the second highest salary from the Employee table.
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+  For example, given the above Employee table, the query should return 200 as the second highest salary. If there is no second highest salary, then the query should return null.
+---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+  SQL Schema Create table If Not Exists Employee (Id int, Salary int) Truncate table Employee insert into Employee (Id, Salary) values (&amp;#39;1&amp;#39;, &amp;#39;100&amp;#39;) insert into Employee (Id, Salary) values (&amp;#39;2&amp;#39;, &amp;#39;200&amp;#39;) insert into Employee (Id, Salary) values (&amp;#39;3&amp;#39;, &amp;#39;300&amp;#39;) My Interesting Code select max(Salary) as SecondHighestSalary from Employee where Salary &amp;lt; (select max(Salary) from Employee) My Perspective This question is also simple.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Write a SQL query to get the second highest salary from the Employee table.</p>
<pre><code>+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
</code></pre>
<p>For example, given the above Employee table, the query should return 200 as the second highest salary. If there is no second highest salary, then the query should return null.</p>
<pre><code>+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> <span style="color:#66d9ef">If</span> <span style="color:#66d9ef">Not</span> <span style="color:#66d9ef">Exists</span> Employee (Id int, Salary int)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Employee
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Salary) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;100&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Salary) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;200&#39;</span>)
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Employee (Id, Salary) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;3&#39;</span>, <span style="color:#e6db74">&#39;300&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> <span style="color:#66d9ef">max</span>(Salary) <span style="color:#66d9ef">as</span> SecondHighestSalary
<span style="color:#66d9ef">from</span> Employee 
<span style="color:#66d9ef">where</span> Salary <span style="color:#f92672">&lt;</span> (<span style="color:#66d9ef">select</span> <span style="color:#66d9ef">max</span>(Salary) <span style="color:#66d9ef">from</span> Employee)
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is also simple. If you want to find the second highest salary, you can find the highest salary first. Then you can traverse the whole table again, but you need to make all the value are less than the highest salary (regardless of equality). Finally, the maximum of these numbers is the answer.</p>
<p>By the way, if you use &ldquo;max&rdquo; function, the column name is &ldquo;max(Salary)&rdquo;. You can use &ldquo;as&rdquo; to address this problem.</p>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[175] Combine Two Tables</title>
            <link>https://www.marshalgao.com/leetcode175-combine-two-tables/</link>
            <pubDate>Fri, 08 Jan 2021 16:21:38 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode175-combine-two-tables/</guid>
            <description>Question Table: Person
+-------------+---------+ | Column Name | Type | +-------------+---------+ | AddressId | int | | PersonId | int | | City | varchar | | State | varchar | +-------------+---------+ PersonId is the primary key column for this table.  Table: Address
+-------------+---------+ | Column Name | Type | +-------------+---------+ | AddressId | int | | PersonId | int | | City | varchar | | State | varchar | +-------------+---------+ AddressId is the primary key column for this table.</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>
<p>Table: Person</p>
<pre><code>+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
PersonId is the primary key column for this table.
</code></pre>
<p>Table: Address</p>
<pre><code>+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId is the primary key column for this table.
</code></pre>
<p>Write a SQL query for a report that provides the following information for each person in the Person table, regardless if there is an address for each of those people:</p>
<pre><code>FirstName, LastName, City, State
</code></pre>
<h2 id="sql-schema">SQL Schema</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> Person (PersonId int, FirstName varchar(<span style="color:#ae81ff">255</span>), LastName varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Create</span> <span style="color:#66d9ef">table</span> Address (AddressId int, PersonId int, City varchar(<span style="color:#ae81ff">255</span>), <span style="color:#66d9ef">State</span> varchar(<span style="color:#ae81ff">255</span>))
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Person
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Person (PersonId, LastName, FirstName) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;Wang&#39;</span>, <span style="color:#e6db74">&#39;Allen&#39;</span>)
<span style="color:#66d9ef">Truncate</span> <span style="color:#66d9ef">table</span> Address
<span style="color:#66d9ef">insert</span> <span style="color:#66d9ef">into</span> Address (AddressId, PersonId, City, <span style="color:#66d9ef">State</span>) <span style="color:#66d9ef">values</span> (<span style="color:#e6db74">&#39;1&#39;</span>, <span style="color:#e6db74">&#39;2&#39;</span>, <span style="color:#e6db74">&#39;New York City&#39;</span>, <span style="color:#e6db74">&#39;New York&#39;</span>)
</code></pre></div><h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#66d9ef">select</span> Person.FirstName, Person.LastName, Address.City, Address.<span style="color:#66d9ef">State</span>
<span style="color:#66d9ef">from</span> Person
<span style="color:#66d9ef">left</span> <span style="color:#66d9ef">join</span> Address
<span style="color:#66d9ef">on</span> Person.PersonId<span style="color:#f92672">=</span>Address.PersonId;
</code></pre></div><h2 id="my-perspective">My Perspective</h2>
<p>This question is simple, but you need to distinguish the differences among left join, right join, and inner join.</p>
<p>Also, there is a useful link, and I think it can help you. (chinese version)</p>
<ul>
<li><a href="https://www.cnblogs.com/wgphp/p/8183812.html">useful link</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Data Analysis</title>
            <link>https://www.marshalgao.com/data-analysis/</link>
            <pubDate>Thu, 07 Jan 2021 15:51:48 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/data-analysis/</guid>
            <description>定性分析与定量分析
 定性分析  对事物性质的归纳 对问题的一种假设   定量分析  对事物数量的统计 对问题的一种验证   数据基础  访谈（定性） 问卷（定量） &amp;hellip;   闭环  定性假设 -&amp;gt; 定量验证 -&amp;gt; 结论 -&amp;gt; 定性假设   区别   定性分析步骤
 转录  文本是最方便处理的形式，首先需要将获得的录音、现场笔记等资料转录为可读的文本   编码  是对资料进行简化、提炼、初步分析的过程 常见方法  归纳法  基于扎根理论，在开始分析之前并不预设编码系统，而是在分析资料的过程中逐步地、自下而上地形成编码系统，从而能够实现从原始资料中提炼出理论和规律   演绎法  根据已有的理论和假设，预先设定一套编码系统，在资料分析的过程中直接使用这套系统中的代码进行标记   综合方法  融合了归纳法和演绎法，不预设代码系统，但是为代码预先创建一套基本的说明系统，限定代码的规则和范围 在资料分析的过程中，根据资料本身的属性和说明系统的要求，产生代码       资料展示  使用可读性更强或者逻辑关系更加清晰的形式展示信息，资料展示的过程也是对资料进行进一步分析的过程 常见方法  矩阵表  类似于表格 了解事件的流程和关联，或者用于个案间的比较   网状图  类似于变量与变量之间的关系网 强调多个变量或者元素之间的关系   脉络图  将群体按照社会体系进行划分，找出内在联系，类似于人际关系脉络 描绘所处的情境、社会体系等，在相关脉络中深入理解人的行为   决策图  类似于流程图 思考和决策的关键节点和流程   认知图  类似于日常的笔记作图，随意关系指代 非层级的网状图，包括很多节点及其联系，表现人们的认知模式   散点图  利用坐标系展现所有所有点（即每一个案例） 根据两个或者多个维度，展示所有个案的情况。       引出结论  从资料中提炼出规律、模式、解释、因果、命题等，并在提炼的过程中快速验证    定量分析步骤</description>
            <content type="html"><![CDATA[<p><strong>定性分析与定量分析</strong></p>
<ul>
<li>定性分析
<ul>
<li>对事物性质的归纳</li>
<li>对问题的一种假设</li>
</ul>
</li>
<li>定量分析
<ul>
<li>对事物数量的统计</li>
<li>对问题的一种验证</li>
</ul>
</li>
<li>数据基础
<ul>
<li>访谈（定性）</li>
<li>问卷（定量）</li>
<li>&hellip;</li>
</ul>
</li>
<li>闭环
<ul>
<li>定性假设 -&gt; 定量验证 -&gt; 结论 -&gt; 定性假设</li>
</ul>
</li>
<li>区别
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/%E6%88%AA%E5%B1%8F2021-01-07%20%E4%B8%8B%E5%8D%884.35.20.png" alt=""></li>
</ul>
<p><strong>定性分析步骤</strong></p>
<ul>
<li>转录
<ul>
<li>文本是最方便处理的形式，首先需要将获得的录音、现场笔记等资料转录为可读的文本</li>
</ul>
</li>
<li>编码
<ul>
<li>是对资料进行简化、提炼、初步分析的过程</li>
<li>常见方法
<ul>
<li>归纳法
<ul>
<li>基于扎根理论，在开始分析之前并不预设编码系统，而是在分析资料的过程中逐步地、自下而上地形成编码系统，从而能够实现从原始资料中提炼出理论和规律</li>
</ul>
</li>
<li>演绎法
<ul>
<li>根据已有的理论和假设，预先设定一套编码系统，在资料分析的过程中直接使用这套系统中的代码进行标记</li>
</ul>
</li>
<li>综合方法
<ul>
<li>融合了归纳法和演绎法，不预设代码系统，但是为代码预先创建一套基本的说明系统，限定代码的规则和范围</li>
<li>在资料分析的过程中，根据资料本身的属性和说明系统的要求，产生代码</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>资料展示
<ul>
<li>使用可读性更强或者逻辑关系更加清晰的形式展示信息，资料展示的过程也是对资料进行进一步分析的过程</li>
<li>常见方法
<ul>
<li>矩阵表
<ul>
<li>类似于表格</li>
<li>了解事件的流程和关联，或者用于个案间的比较</li>
</ul>
</li>
<li>网状图
<ul>
<li>类似于变量与变量之间的关系网</li>
<li>强调多个变量或者元素之间的关系</li>
</ul>
</li>
<li>脉络图
<ul>
<li>将群体按照社会体系进行划分，找出内在联系，类似于人际关系脉络</li>
<li>描绘所处的情境、社会体系等，在相关脉络中深入理解人的行为</li>
</ul>
</li>
<li>决策图
<ul>
<li>类似于流程图</li>
<li>思考和决策的关键节点和流程</li>
</ul>
</li>
<li>认知图
<ul>
<li>类似于日常的笔记作图，随意关系指代</li>
<li>非层级的网状图，包括很多节点及其联系，表现人们的认知模式</li>
</ul>
</li>
<li>散点图
<ul>
<li>利用坐标系展现所有所有点（即每一个案例）</li>
<li>根据两个或者多个维度，展示所有个案的情况。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>引出结论
<ul>
<li>从资料中提炼出规律、模式、解释、因果、命题等，并在提炼的过程中快速验证</li>
</ul>
</li>
</ul>
<p><strong>定量分析步骤</strong></p>
<ul>
<li>量化阶段
<ul>
<li>完成预期数据的收集</li>
</ul>
</li>
<li>分析阶段
<ul>
<li>一般分析框架
<ul>
<li>数据集的选取</li>
<li>数据预处理</li>
<li>特征工程</li>
<li>建立分析模型</li>
<li>模型验证</li>
<li>发布分析结果</li>
</ul>
</li>
<li>第2、3、4步将会是一个循环往复的过程，模型所得的结果达不到预期时，就必须回到第3步去调整或者更换模型，预先处理好的数据此时可能就需要重新准备</li>
</ul>
</li>
</ul>
<p><strong>BB Part</strong></p>
<p>定性与定量分析各有优缺点，常常协同使用。个人感觉在PM领域，主要用来简单分析数据进而获得需求。定性更注重个例（可以理解为每个个体都会有创造性），而定量更注重最终的因果关系，两种方法都是对的，即便分析结果可能相反。所以，需要根据具体功能具体分析，以获取最真实的需求点。</p>
]]></content>
        </item>
        
        <item>
            <title>Development Model</title>
            <link>https://www.marshalgao.com/development-model/</link>
            <pubDate>Wed, 06 Jan 2021 16:35:38 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/development-model/</guid>
            <description>5种常见开发模式
 瀑布式开发  典型的预见性方法 自上而下 上一阶段结束，下一阶段执行，不可回溯 优点  预先计划 便于确定预期的开发成本和时间   缺点  无法预知未来 环环相扣，一环出问题，满盘皆输 测试发现问题，开发没法及时解决（开发此时可能已经处于下一个项目的研发中）   适合场景  具有明确定义和不变需求的中小型项目，比如小型公司网站开发 需要严格控制流程，预算和时间表可预测的项目，比如政府类项目 必须遵守多个规章制度的项目，比如医疗软件 使用了业内熟悉的成熟的技术方案的项目      增量和迭代开发  增量开发  项目切割成子模块（相对独立） 横向开发 可以顺序进行，也可以并行进行 如果研发资源有限，需要进行子模块的排序 如果研发资源充足，那么在设计阶段PM任务量较大    迭代开发  项目切割成子任务（以上一次迭代为基础进行） 纵向开发 项目初期不需要完整的规范，在开发过程中可以对需求进行少量更改，但需求根本和主体不能改变 每次迭代需要留下清晰的文档    优点  如果失败，只是一小部分的失败，降低损失，软件容易成功 也可以根据上线版本的用户反馈，结合完成下一次迭代方案   缺点  沟通或文档的不清晰，会导致后期融合出现问题   适合场景  大型关键企业应用程序，最好由松散耦合的部分组成，比如微服务或web服务类     看板开发  属于敏捷开发的一种（scrum也是其中一种） 自下而上（与瀑布式开发对比） 后道工序需要时，给前道工序发信号，前道工序才启动任务 用户需求为原动力 优点  没有明显的迭代过程，可以随时加入新需求 即来即增加，即变即更新 团队中的人可以清楚看到所有任务的负责人以及进度等 透明度高有助于准确估计最要紧的任务，项目组越来越自动化 站立会 —— 每人交代已完成的任务和遇到的问题（对于复杂问题会有专项讨论） 遇到问题，立刻停下来解决   缺点  不利于思维的发散   适合场景  要求处理目标用户前期反馈的新项目 业务要求不能被清晰地转换成产品需求的中型定制化项目      极限编程（XP）  属于敏捷开发的一种 与看板开发相比，更注重快速解决问题 团队人数少，人人平等，畅所欲言 优点  没有总体设计，设计过程贯穿始终 只要满足需求，通过测试即可（因为满足需求后，后期会有迭代版本）   缺点  对团队要求高 由于过程不拘泥于形式，后期文档在完整性上会有所欠缺 项目组成员流动会带来巨大问题   适合场景  要求处理目标用户前期反馈的新项目 业务要求不能被清晰地转换成产品需求的中型定制化项目 经常发生变化的项目、紧急上线任务和封闭开发等      从操作灵活性和用户参与度进行对比 </description>
            <content type="html"><![CDATA[<p><strong>5种常见开发模式</strong></p>
<ul>
<li>瀑布式开发
<ul>
<li>典型的预见性方法</li>
<li>自上而下</li>
<li>上一阶段结束，下一阶段执行，不可回溯</li>
<li>优点
<ul>
<li>预先计划</li>
<li>便于确定预期的开发成本和时间</li>
</ul>
</li>
<li>缺点
<ul>
<li>无法预知未来</li>
<li>环环相扣，一环出问题，满盘皆输</li>
<li>测试发现问题，开发没法及时解决（开发此时可能已经处于下一个项目的研发中）</li>
</ul>
</li>
<li>适合场景
<ul>
<li>具有明确定义和不变需求的中小型项目，比如小型公司网站开发</li>
<li>需要严格控制流程，预算和时间表可预测的项目，比如政府类项目</li>
<li>必须遵守多个规章制度的项目，比如医疗软件</li>
<li>使用了业内熟悉的成熟的技术方案的项目
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/Fc8f56VThJnXOgTiUkhc.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>增量和迭代开发
<ul>
<li>增量开发
<ul>
<li>项目切割成子模块（相对独立）</li>
<li>横向开发</li>
<li>可以顺序进行，也可以并行进行</li>
<li>如果研发资源有限，需要进行子模块的排序</li>
<li>如果研发资源充足，那么在设计阶段PM任务量较大
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/Q523Z0xbygTKC8iHzPyv.png" alt=""></li>
</ul>
</li>
<li>迭代开发
<ul>
<li>项目切割成子任务（以上一次迭代为基础进行）</li>
<li>纵向开发</li>
<li>项目初期不需要完整的规范，在开发过程中可以对需求进行少量更改，但需求根本和主体不能改变</li>
<li>每次迭代需要留下清晰的文档
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/S5vQKKpMK3wBibWoSXW9.png" alt=""></li>
</ul>
</li>
<li>优点
<ul>
<li>如果失败，只是一小部分的失败，降低损失，软件容易成功</li>
<li>也可以根据上线版本的用户反馈，结合完成下一次迭代方案</li>
</ul>
</li>
<li>缺点
<ul>
<li>沟通或文档的不清晰，会导致后期融合出现问题</li>
</ul>
</li>
<li>适合场景
<ul>
<li>大型关键企业应用程序，最好由松散耦合的部分组成，比如微服务或web服务类</li>
</ul>
</li>
</ul>
</li>
<li>看板开发
<ul>
<li>属于敏捷开发的一种（scrum也是其中一种）</li>
<li>自下而上（与瀑布式开发对比）</li>
<li>后道工序需要时，给前道工序发信号，前道工序才启动任务</li>
<li>用户需求为原动力</li>
<li>优点
<ul>
<li>没有明显的迭代过程，可以随时加入新需求</li>
<li>即来即增加，即变即更新</li>
<li>团队中的人可以清楚看到所有任务的负责人以及进度等</li>
<li>透明度高有助于准确估计最要紧的任务，项目组越来越自动化</li>
<li>站立会 —— 每人交代已完成的任务和遇到的问题（对于复杂问题会有专项讨论）</li>
<li>遇到问题，立刻停下来解决</li>
</ul>
</li>
<li>缺点
<ul>
<li>不利于思维的发散</li>
</ul>
</li>
<li>适合场景
<ul>
<li>要求处理目标用户前期反馈的新项目</li>
<li>业务要求不能被清晰地转换成产品需求的中型定制化项目
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/GrlnJOXwxm4Oe6fmHsFN.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>极限编程（XP）
<ul>
<li>属于敏捷开发的一种</li>
<li>与看板开发相比，更注重快速解决问题</li>
<li>团队人数少，人人平等，畅所欲言</li>
<li>优点
<ul>
<li>没有总体设计，设计过程贯穿始终</li>
<li>只要满足需求，通过测试即可（因为满足需求后，后期会有迭代版本）</li>
</ul>
</li>
<li>缺点
<ul>
<li>对团队要求高</li>
<li>由于过程不拘泥于形式，后期文档在完整性上会有所欠缺</li>
<li>项目组成员流动会带来巨大问题</li>
</ul>
</li>
<li>适合场景
<ul>
<li>要求处理目标用户前期反馈的新项目</li>
<li>业务要求不能被清晰地转换成产品需求的中型定制化项目</li>
<li>经常发生变化的项目、紧急上线任务和封闭开发等</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>从操作灵活性和用户参与度进行对比</strong>
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/8AbkkSIVjuXxDy1xwd00.png" alt=""></p>
]]></content>
        </item>
        
        <item>
            <title>Integration and Link</title>
            <link>https://www.marshalgao.com/integration-and-link/</link>
            <pubDate>Tue, 05 Jan 2021 15:49:08 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/integration-and-link/</guid>
            <description>整合 vs 链路
 区别  整合是为了占据消费者心智 链路是为了驱动消费者行为   整合营销  在不同的地方，用同一个声音说话 整合各类营销资源，保持统一的声音和形象 将户外广告、公共关系、SEM（引擎营销）、内容营销、终端促销等看成一个整体，让不同的传播活动去共同打造统一的品牌形象 问题  信息碎片化程度超过了预期，无法有效整合所有的媒介 数字营销在不断进步，广告对消费者的影响周期缩短了  以往的广告和卖场是分离的，企业将广告信息浓缩在海报、电视广告中，目的是为了消费者在现在商场购物时，想到这个品牌 数字营销的广告和卖场是一体的，所见即所购，比如直播带货 广告不再是一种心智占领（整合），而是一种行为诱导（链路）   营销的潜台词是效果而不是品牌  由于每一笔广告的ROI，导致越来越多的广告主在意效果 效果广告注重消费者从看到广告到购买商品的整个行为链条 -&amp;gt; 链路       链路  链路在整合之余，更关注不同步骤的广告活动对消费行为的影响 在空间维度之外，加入了时间维度 驱动消费者行为决策   案例对比  蒙牛赞助《超级女声》，利用的就是整合营销，全方位的宣传 蒙牛赞助《创造营》，利用的就是链路  通过购买蒙牛产品进行投票 驱动了购买行为      链路法则
 互联网传播广告模型——AISAS法则  内容  Attention（注意） Interest（兴趣） Search（搜索） Action（购买） Share（分享）   使用范围  适合一些高决策力的产品，例如：汽车、手机、房产（价格高，需要深思熟虑）     增长黑客AARRR理论  传统企业营销目标是“卖货”，而互联网企业的目标是“获客” 由于移动互联网的发展，“拉新”代替了“品牌知名度”，“留存”代替了“复购” 内容  Acquisition（获取） Activation（激活） Retention（留存） Revenue（付费） Refer（推荐）   该理论提倡“去广告化”，“老用户带新用户” 前期广告的钱用来用户补贴和技术搭建，屡试不爽 案例  饿了么、滴滴、拼多多、美团      链路原则</description>
            <content type="html"><![CDATA[<p><strong>整合 vs 链路</strong></p>
<ul>
<li>区别
<ul>
<li>整合是为了占据消费者心智</li>
<li>链路是为了驱动消费者行为</li>
</ul>
</li>
<li>整合营销
<ul>
<li>在不同的地方，用同一个声音说话</li>
<li>整合各类营销资源，保持统一的声音和形象</li>
<li>将户外广告、公共关系、SEM（引擎营销）、内容营销、终端促销等看成一个整体，让不同的传播活动去共同打造统一的品牌形象</li>
<li>问题
<ul>
<li>信息碎片化程度超过了预期，无法有效整合所有的媒介</li>
<li>数字营销在不断进步，广告对消费者的影响周期缩短了
<ul>
<li>以往的广告和卖场是分离的，企业将广告信息浓缩在海报、电视广告中，目的是为了消费者在现在商场购物时，想到这个品牌</li>
<li>数字营销的广告和卖场是一体的，所见即所购，比如直播带货</li>
<li>广告不再是一种心智占领（整合），而是一种行为诱导（链路）</li>
</ul>
</li>
<li>营销的潜台词是效果而不是品牌
<ul>
<li>由于每一笔广告的ROI，导致越来越多的广告主在意效果</li>
<li>效果广告注重消费者从看到广告到购买商品的整个行为链条 -&gt; 链路</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>链路
<ul>
<li>链路在整合之余，更关注不同步骤的广告活动对消费行为的影响</li>
<li>在空间维度之外，加入了时间维度</li>
<li>驱动消费者行为决策</li>
</ul>
</li>
<li>案例对比
<ul>
<li>蒙牛赞助《超级女声》，利用的就是整合营销，全方位的宣传</li>
<li>蒙牛赞助《创造营》，利用的就是链路
<ul>
<li>通过购买蒙牛产品进行投票</li>
<li>驱动了购买行为</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>链路法则</strong></p>
<ul>
<li>互联网传播广告模型——AISAS法则
<ul>
<li>内容
<ul>
<li>Attention（注意）</li>
<li>Interest（兴趣）</li>
<li>Search（搜索）</li>
<li>Action（购买）</li>
<li>Share（分享）</li>
</ul>
</li>
<li>使用范围
<ul>
<li>适合一些高决策力的产品，例如：汽车、手机、房产（价格高，需要深思熟虑）</li>
</ul>
</li>
</ul>
</li>
<li>增长黑客AARRR理论
<ul>
<li>传统企业营销目标是“卖货”，而互联网企业的目标是“获客”</li>
<li>由于移动互联网的发展，“拉新”代替了“品牌知名度”，“留存”代替了“复购”</li>
<li>内容
<ul>
<li>Acquisition（获取）</li>
<li>Activation（激活）</li>
<li>Retention（留存）</li>
<li>Revenue（付费）</li>
<li>Refer（推荐）</li>
</ul>
</li>
<li>该理论提倡“去广告化”，“老用户带新用户”</li>
<li>前期广告的钱用来用户补贴和技术搭建，屡试不爽</li>
<li>案例
<ul>
<li>饿了么、滴滴、拼多多、美团</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>链路原则</strong></p>
<ul>
<li>链路不能断裂
<ul>
<li>案例
<ul>
<li>利用AISAS法则进行宝马汽车的销售</li>
<li>如果消费者近期对宝马广告没印象，只对奔驰有印象，会直接搜索奔驰，链条断裂</li>
<li>如果消费者在搜索时，奥迪的搜索竞价排名更高，那可能导致消费者最终买了奥迪，链条断裂</li>
</ul>
</li>
<li>上述案例的问题在于链条步骤太多，耗时太长</li>
<li>为了防止夜长梦多，可以缩短营销链路</li>
</ul>
</li>
<li>更短的链路 = 更高效的转化
<ul>
<li>省去中间步骤，加速消费者的购买决策，即看到广告 -&gt; 直接行动</li>
<li>为了达成这样的营销链路，最好是消费者看到广告的同时，引起了消费兴趣，降低了心理防线，在购物的同时完成分享裂变</li>
<li>案例
<ul>
<li>拼多多的砍价链接</li>
</ul>
</li>
<li>这就要求广告内容是从消费心理去设计，而不是从产品功能设计
<ul>
<li>案例1
<ul>
<li>脑白金主要成分是褪黑素，治疗失眠</li>
<li>广告语“治失眠，找脑白金” -&gt; 产品功能设计</li>
<li>广告语“今年过节不收礼，收礼就收脑白金” -&gt; 消费心理设计</li>
</ul>
</li>
<li>案例2
<ul>
<li>拼多多“拼团”</li>
<li>抓住了人性的两个特点
<ul>
<li>占便宜 -&gt; 激发购物欲望</li>
<li>限时 -&gt; 没时间犹豫</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>所以，缩短链路的核心在于，广告不应该只灌输品牌理念，而是要唤醒消费者的购物欲</li>
<li>但很多高决策产品，在短期内很难实现消费者的购买，那么如何在漫长的预购周期里一直抓住消费者
<ul>
<li>需要数据和媒介的无障碍流通</li>
</ul>
</li>
</ul>
</li>
<li>数据要能无障碍流通
<ul>
<li>现象
<ul>
<li>在数字营销中，消费者一旦离开了你投放的媒体，就无法追踪该消费者的行为轨迹</li>
<li>例如：一个人在微信上看到了种草，并没有在微信直接下单，而是去天猫购买，虽然企业获得了转化，但不知道这笔订单从何而来</li>
<li>而抖音会从其自身跳转到淘宝，这样企业就可以获得完整的用户行为数据</li>
</ul>
</li>
<li>整合传播规划时，企图用一个营销链路打通全网，这是不现实的</li>
<li>需要做的是在不同的媒体生态里，使用不同的链路模型</li>
<li>如何判断媒体的数据能力是否可以支撑整个链路
<ul>
<li>媒体有没有“后链路”数据
<ul>
<li>所谓的“后链路”数据，也就是最终的市场端数据
<ul>
<li>以三只松鼠而言，就是天猫店铺的销量数据</li>
<li>以拼多多而言，就是APP的会员拉新和购物数据</li>
<li>以奔驰而言，就是收集到的销售线索数据</li>
</ul>
</li>
<li>原因
<ul>
<li>链路最终目的是驱动消费行为、下载行为、留资行为等，而不是单纯的广告点击和观看，而这一切营销都要服务于最终的市场结果</li>
</ul>
</li>
<li>只有打通后链路的数据，才能有效指导广告如何定向、内容素材如何制作、选择什么样的广告位置，这些最基本的广告投放问题</li>
<li>案例
<ul>
<li>在零售领域而言，后链路数据最完善的体系是阿里，因为可以打通淘系和支付宝的购买系统</li>
<li>腾讯体系由于缺乏电商平台，只有京东和唯品会等第三方平台接入，数据的流通会相对滞塞一些，但随着小程序电商的完善，腾讯的零售链路生态会进一步加强</li>
<li>字节跳动虽然也缺少后链路数据，但是他们前链路足够强</li>
</ul>
</li>
</ul>
</li>
<li>媒体要有足量的“前链路”数据
<ul>
<li>“前链路”数据就是广告行为数据，也就是消费者广告的浏览、点赞、评论、观看完成率等数据指标</li>
<li>原因
<ul>
<li>大数据技术成立的前提就是数据要足够多，颗粒要足够细，才能在数据里看出趋势和端倪</li>
</ul>
</li>
<li>案例1
<ul>
<li>微信和头条的信息流广告</li>
<li>微信一天三条，头条一天可以有很多</li>
<li>由于字节在这方面的天然优势，其广告的优化空间更大</li>
</ul>
</li>
<li>案例2
<ul>
<li>长视频平台的贴片广告</li>
<li>由于无法点赞、评论，其对于夯实用户心智更为重要，而不是驱动用户行为</li>
<li>如果长视频平台想要营销链路确实有效，就需要调整广告形态，产生足量的“前链路”数据</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Programmatic Advertising</title>
            <link>https://www.marshalgao.com/programmatic-advertising/</link>
            <pubDate>Tue, 05 Jan 2021 12:02:50 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/programmatic-advertising/</guid>
            <description>定义
程序化广告是指广告主通过数字平台从受众的匹配的角度由程序自动化完成展示类广告的采买和投放，并实时反馈投放分析的一种广告投放方式，实现了整个数字广告的自动化。
四大特点
 数字平台  程序化广告是通过数字平台（DSP和ADX）进行投放 -&amp;gt; 最基本的特点 通过媒体方的广告投放平台进行投放，不算程序化广告，因为不经过DSP  例如，微信朋友圈广告（只有展示和不展示，并不涉及投放的选择）   场景类比  买菜的人（DSP）在菜市场（ADX）寻找摆摊的菜贩子（SSP）     受众角度  通过与用户画像（标签）进行匹配，做到广告的“千人千面“，实现精准营销 传统广告  购买广告位，并在一段展示时间内付费 目标流量的不明确，过于宽泛   程序化广告  购买受众流量 目标流量明确且精准 问题与挑战  品牌安全问题  品牌广告不应出现在暴力、色情等网站 例如，YouTube恐怖分子宣传视频出现某公司的广告       传统广告 vs 程序化广告    程序自动化  根据媒体主（SSP）竞价请求提供的信息，依据广告策略和算法自动完成对每次展示的竞价决策（是否出价、出价多少） 返回为毫秒级别，速度快 不需人为干涉，十分高效 有些已经实现自动优化功能，例如动态创意优化   展示类广告  程序化广告只在展示类广告存在 在线广告可以分为两种  搜索类广告 展示类广告  banner 信息流 背投 视频贴片        品牌方如何投放程序化广告</description>
            <content type="html"><![CDATA[<p><strong>定义</strong></p>
<p>程序化广告是指广告主通过数字平台从受众的匹配的角度由程序自动化完成展示类广告的采买和投放，并实时反馈投放分析的一种广告投放方式，实现了整个数字广告的自动化。</p>
<p><strong>四大特点</strong></p>
<ul>
<li>数字平台
<ul>
<li>程序化广告是通过数字平台（DSP和ADX）进行投放 -&gt; 最基本的特点</li>
<li>通过媒体方的广告投放平台进行投放，不算程序化广告，因为不经过DSP
<ul>
<li>例如，微信朋友圈广告（只有展示和不展示，并不涉及投放的选择）</li>
</ul>
</li>
<li>场景类比
<ul>
<li>买菜的人（DSP）在菜市场（ADX）寻找摆摊的菜贩子（SSP）</li>
</ul>
</li>
</ul>
</li>
<li>受众角度
<ul>
<li>通过与用户画像（标签）进行匹配，做到广告的“千人千面“，实现精准营销</li>
<li>传统广告
<ul>
<li>购买广告位，并在一段展示时间内付费</li>
<li>目标流量的不明确，过于宽泛</li>
</ul>
</li>
<li>程序化广告
<ul>
<li>购买受众流量</li>
<li>目标流量明确且精准</li>
<li>问题与挑战
<ul>
<li>品牌安全问题
<ul>
<li>品牌广告不应出现在暴力、色情等网站</li>
<li>例如，YouTube恐怖分子宣传视频出现某公司的广告</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>传统广告 vs 程序化广告
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/KuWKc3fYPh1QxX6DTwoB_%E5%89%AF%E6%9C%AC.png" alt=""></li>
</ul>
</li>
<li>程序自动化
<ul>
<li>根据媒体主（SSP）竞价请求提供的信息，依据广告策略和算法自动完成对每次展示的竞价决策（是否出价、出价多少）</li>
<li>返回为毫秒级别，速度快</li>
<li>不需人为干涉，十分高效</li>
<li>有些已经实现自动优化功能，例如动态创意优化</li>
</ul>
</li>
<li>展示类广告
<ul>
<li>程序化广告只在展示类广告存在</li>
<li>在线广告可以分为两种
<ul>
<li>搜索类广告</li>
<li>展示类广告
<ul>
<li>banner</li>
<li>信息流</li>
<li>背投</li>
<li>视频贴片</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>品牌方如何投放程序化广告</strong></p>
<ul>
<li>
<p>品牌广告考核指标</p>
<ul>
<li>广告效果
<ul>
<li>衡量用户活跃度和对广告的接受度</li>
<li>传播效果利用曝光度衡量</li>
<li>心理效果利用用户的行为效果进行间接评估</li>
<li>行为效果可以从落地页、网站、APP访问以及用户互动角度进行考核</li>
</ul>
</li>
<li>成本收益
<ul>
<li>衡量广告投放整体消耗、各渠道等纬度的性价比</li>
</ul>
</li>
<li>投放保障
<ul>
<li>一般是衡量广告投放的真实性和安全性</li>
<li>用于保障广告效果以及成本收益</li>
</ul>
</li>
</ul>
</li>
<li>
<p>品牌安全</p>
</li>
<li>
<p>透明程序化</p>
<ul>
<li>将成为品牌广告购买的大趋势</li>
<li>进行程序化广告投放时，应在不同环节采取相应的透明措施</li>
</ul>
</li>
<li>
<p>第三方技术服务供应商</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/6w9GRo52Vok21NCyopB3.jpg" alt=""></p>
</li>
<li>
<p>采用RTB (Real Time Bidding) + PDB (Programmatic Direct Buying) 与传统投放相比的优势</p>
<ul>
<li>品牌广告主一般有排期购买优质流量和控制预算的需求</li>
<li>RTB可以随时挑量，但买的是库存流量，价格、质量以及能买到的展示量级都无法确保</li>
<li>PDB可以采购优先流量，确保排期，但是有限的订单流量可能无法满足投放的KPI</li>
<li>两者的结合投放，在保证优势的前提下，还可以互相补充</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Advertising Platform</title>
            <link>https://www.marshalgao.com/advertising-platform/</link>
            <pubDate>Mon, 04 Jan 2021 20:11:52 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/advertising-platform/</guid>
            <description>在线广告市场结构
 广告主：金主爸爸，有广告联盟和广告主两种形式 广告平台：提供流量分发的能力，与此同时也提供广告创意，广告素材服务，如百度推广、腾讯广告等 媒体：流量提供方，互联网公司是现在世界上最大的媒体 消费者：C端用户，广告和流量的使用者 关系图   广告系统模块规划
 广告投放系统：广告投放系统承担了广告内容管理和广告流量分发的功能，承前启后，是广告系统的核心部分 商户后台系统：用于广告主和广告联盟商自主接入的管理平台，主要包含广告需求承接和广告效果数据、广告费用的展示 运营后台系统：广告平台方的运营后台，主要用于广告审核、广告主管理和其他管理功能 广告素材设计系统：用于制作广告创意，根据广告位的要求支持不同尺寸、不同投放环境的创意设计 数据统计系统：用于广告效果数据收集和分析 关系图   广告需求模型设计
 站在广告主的立场，至少分为广告主-投放计划-广告素材（创意）  广告主：广告的需求方，是广告效果和广告计费统一的收口方，广告主名下的广告投放计划所产生的成本均计入广告主的整体费用 投放计划：广告主名下往往由很多广告需求，我们将每个定制的广告需求称为投放计划 广告素材（创意）：广告投放最小颗粒是广告素材（创意），每一个投放计划都可能包含多个广告素材的投放。广告计费的也是根据广告素材的曝光、点击、展示时长等计费方式的数值进行计算的。常用的广告创意有横幅广告（banner），文字链广告，视频广告，嵌入式社交广告、sdk嵌入式移动广告等   广告主同时需要对广告的投放目标、投放时间、投放的定向和预算等进行配置 关系图   广告投放模型的建立
 结合广告主的需求，将素材进行精准投放 结合计费模式 关系图   设计有效的广告投放流程——以CPM竞价为例
 请求广告：一般采用广告组件或者sdk等方式嵌入在广告位中，广告组件可以根据广告位的用户属性等信息向广告投放系统请求广告资源 匹配广告位：按照广告位的不同， 广告系统需要选择符合当前广告位投放目标的广告需求池 匹配投放计划：将广告位的用户属性等信息与大数据标签系统进行匹配，获取对应的用户画像标签，根据标签来和广告投放计划的定向需求进行匹配，并通过竞价选取对应的投放计划 匹配广告创意：由于符合条件每个投放计划可能有多个广告素材，因此需要根据实时的广告效果来对广告素材进行评估，并选择转化率更高的广告素材进行投放 广告数据统计：在达成统计要求后，统计广告效果数据，如曝光量、点击量等 投放流程图   广告投放策略系统
 需求点  广告运营需要一直关注投放效果，不断调整投放，控制成本，同时保证效率   名词解释  自动化的广告盯盘工具   组成部分  数据项  前段数据  浏览量、点击量 前期更注重前段数据，因为没有一定曝光，何谈转化   后端数据  App下载量、注册成本 一定程度上取决于广告素材是否吸引用户，完成转化   当前段数据达到一个阈值之后，辅以后段指标进行验证   逻辑判断条件和数值  利用大于、小于或是介于两者之间来出发投放策略调整   条件组合  同时满足 - and 任意满足 - or 例如  当消耗和成本不符合预算时，需要降低预算  「消耗」&amp;gt; XX元，且「转化成本」&amp;gt; XX元 -&amp;gt; 降低预算   广告渡过冷启动阶段，需要提高预算，加速冲量  「曝光量」&amp;gt; XX，且「转化数」&amp;gt;= XX -&amp;gt; 提高预算       执行动作  当广告达到条件预设值后，需要对广告执行相应的操作  调整预算  有预算封顶值   调整出价 更换定向包 暂停广告   可以设置包含多个动作的复杂任务，实现触发     补充  策略系统搭建完成后，需要考虑接口的并发  不同媒介对接口的分钟调用和日调用都是有限制的，从而影响拉取广告数据的频率   例如  1h拉取一次 -&amp;gt; 策略机制形同虚设      </description>
            <content type="html"><![CDATA[<p><strong>在线广告市场结构</strong></p>
<ul>
<li>广告主：金主爸爸，有广告联盟和广告主两种形式</li>
<li>广告平台：提供流量分发的能力，与此同时也提供广告创意，广告素材服务，如百度推广、腾讯广告等</li>
<li>媒体：流量提供方，互联网公司是现在世界上最大的媒体</li>
<li>消费者：C端用户，广告和流量的使用者</li>
<li>关系图
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-7e2130dca12e44f1acba27c3beeea732_1440w.jpg" alt=""></li>
</ul>
<p><strong>广告系统模块规划</strong></p>
<ul>
<li>广告投放系统：广告投放系统承担了广告内容管理和广告流量分发的功能，承前启后，是广告系统的核心部分</li>
<li>商户后台系统：用于广告主和广告联盟商自主接入的管理平台，主要包含广告需求承接和广告效果数据、广告费用的展示</li>
<li>运营后台系统：广告平台方的运营后台，主要用于广告审核、广告主管理和其他管理功能</li>
<li>广告素材设计系统：用于制作广告创意，根据广告位的要求支持不同尺寸、不同投放环境的创意设计</li>
<li>数据统计系统：用于广告效果数据收集和分析</li>
<li>关系图
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-ffa3f7e77a1be9ee683afcc08cda4391_r.jpg" alt=""></li>
</ul>
<p><strong>广告需求模型设计</strong></p>
<ul>
<li>站在广告主的立场，至少分为<strong>广告主-投放计划-广告素材（创意）</strong>
<ul>
<li>广告主：广告的需求方，是广告效果和广告计费统一的收口方，广告主名下的广告投放计划所产生的成本均计入广告主的整体费用</li>
<li>投放计划：广告主名下往往由很多广告需求，我们将每个定制的广告需求称为投放计划</li>
<li>广告素材（创意）：广告投放最小颗粒是广告素材（创意），每一个投放计划都可能包含多个广告素材的投放。广告计费的也是根据广告素材的曝光、点击、展示时长等计费方式的数值进行计算的。常用的广告创意有横幅广告（banner），文字链广告，视频广告，嵌入式社交广告、sdk嵌入式移动广告等</li>
</ul>
</li>
<li>广告主同时需要对广告的投放目标、投放时间、投放的定向和预算等进行配置</li>
<li>关系图
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-804cb20a4ba428f69c540084465c4742_1440w.jpg" alt=""></li>
</ul>
<p><strong>广告投放模型的建立</strong></p>
<ul>
<li>结合广告主的需求，将素材进行精准投放</li>
<li>结合计费模式</li>
<li>关系图
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-f70eba6ec50d711bc0649518aa209f5c_1440w.jpg" alt=""></li>
</ul>
<p><strong>设计有效的广告投放流程——以CPM竞价为例</strong></p>
<ul>
<li>请求广告：一般采用广告组件或者sdk等方式嵌入在广告位中，广告组件可以根据广告位的用户属性等信息向广告投放系统请求广告资源</li>
<li>匹配广告位：按照广告位的不同， 广告系统需要选择符合当前广告位投放目标的广告需求池</li>
<li>匹配投放计划：将广告位的用户属性等信息与大数据标签系统进行匹配，获取对应的用户画像标签，根据标签来和广告投放计划的定向需求进行匹配，并通过竞价选取对应的投放计划</li>
<li>匹配广告创意：由于符合条件每个投放计划可能有多个广告素材，因此需要根据实时的广告效果来对广告素材进行评估，并选择转化率更高的广告素材进行投放</li>
<li>广告数据统计：在达成统计要求后，统计广告效果数据，如曝光量、点击量等</li>
<li>投放流程图
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-2b96f508f1bd08bc313c53693cd2409c_1440w.jpg" alt=""></li>
</ul>
<p><strong>广告投放策略系统</strong></p>
<ul>
<li>需求点
<ul>
<li>广告运营需要一直关注投放效果，不断调整投放，控制成本，同时保证效率</li>
</ul>
</li>
<li>名词解释
<ul>
<li>自动化的广告盯盘工具</li>
</ul>
</li>
<li>组成部分
<ul>
<li>数据项
<ul>
<li>前段数据
<ul>
<li>浏览量、点击量</li>
<li>前期更注重前段数据，因为没有一定曝光，何谈转化</li>
</ul>
</li>
<li>后端数据
<ul>
<li>App下载量、注册成本</li>
<li>一定程度上取决于广告素材是否吸引用户，完成转化</li>
</ul>
</li>
<li>当前段数据达到一个阈值之后，辅以后段指标进行验证</li>
</ul>
</li>
<li>逻辑判断条件和数值
<ul>
<li>利用大于、小于或是介于两者之间来出发投放策略调整</li>
</ul>
</li>
<li>条件组合
<ul>
<li>同时满足 - and</li>
<li>任意满足 - or</li>
<li>例如
<ul>
<li>当消耗和成本不符合预算时，需要降低预算
<ul>
<li>「消耗」&gt; XX元，且「转化成本」&gt; XX元 -&gt; 降低预算</li>
</ul>
</li>
<li>广告渡过冷启动阶段，需要提高预算，加速冲量
<ul>
<li>「曝光量」&gt; XX，且「转化数」&gt;= XX -&gt; 提高预算</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>执行动作
<ul>
<li>当广告达到条件预设值后，需要对广告执行相应的操作
<ul>
<li>调整预算
<ul>
<li>有预算封顶值</li>
</ul>
</li>
<li>调整出价</li>
<li>更换定向包</li>
<li>暂停广告</li>
</ul>
</li>
<li>可以设置包含多个动作的复杂任务，实现触发</li>
</ul>
</li>
</ul>
</li>
<li>补充
<ul>
<li>策略系统搭建完成后，需要考虑接口的并发
<ul>
<li>不同媒介对接口的分钟调用和日调用都是有限制的，从而影响拉取广告数据的频率</li>
</ul>
</li>
<li>例如
<ul>
<li>1h拉取一次 -&gt; 策略机制形同虚设</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Ignore the Past and Embrace the Future</title>
            <link>https://www.marshalgao.com/ignore-the-past-and-embrace-the-future/</link>
            <pubDate>Thu, 31 Dec 2020 21:39:04 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/ignore-the-past-and-embrace-the-future/</guid>
            <description>   2020或许有悲欢离合，但依旧刻骨铭心！ 希望2021不念过往，拥抱未来！ 年度感谢小刘输入的BGM！ 给2020在我身边的人笔芯！ </description>
            <content type="html"><![CDATA[<div class="iframe-container">
    <iframe src="//player.bilibili.com/player.html?aid=415984035&bvid=BV17V41187ZG&cid=274462841&page=1" allowfullscreen> </iframe>
</div>
<hr>
<h5 id="2020或许有悲欢离合但依旧刻骨铭心">2020或许有悲欢离合，但依旧刻骨铭心！</h5>
<h5 id="希望2021不念过往拥抱未来">希望2021不念过往，拥抱未来！</h5>
<h5 id="年度感谢小刘输入的bgm">年度感谢小刘输入的BGM！</h5>
<h5 id="给2020在我身边的人笔芯">给2020在我身边的人笔芯！</h5>
]]></content>
        </item>
        
        <item>
            <title>HKU Semester 1</title>
            <link>https://www.marshalgao.com/hku-semester-1/</link>
            <pubDate>Mon, 21 Dec 2020 22:39:24 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/hku-semester-1/</guid>
            <description>   消失了好久，真的不是懒惰，是因为HKU的due实在太多了！ 好在好在HKU的第一学期结束啦，强迫自己圣诞节前出稿！ 马上要考研了，希望我的兄弟们可以smoothly有学上，已经上学的期末up起来！ 这次没有小刘同学的BGM，是这个🐶思想滑坡了！ 圣诞快乐啦，everybody！ btw，今天冬至，北方饺子，南方汤圆，都安排起来！！！ </description>
            <content type="html"><![CDATA[<div class="iframe-container">
    <iframe src="//player.bilibili.com/player.html?aid=843139818&bvid=BV1154y147Tt&cid=269266470&page=1" allowfullscreen> </iframe>
</div>
<hr>
<h5 id="消失了好久真的不是懒惰是因为hku的due实在太多了">消失了好久，真的不是懒惰，是因为HKU的due实在太多了！</h5>
<h5 id="好在好在hku的第一学期结束啦强迫自己圣诞节前出稿">好在好在HKU的第一学期结束啦，强迫自己圣诞节前出稿！</h5>
<h5 id="马上要考研了希望我的兄弟们可以smoothly有学上已经上学的期末up起来">马上要考研了，希望我的兄弟们可以smoothly有学上，已经上学的期末up起来！</h5>
<h5 id="这次没有小刘同学的bgm是这个思想滑坡了">这次没有小刘同学的BGM，是这个🐶思想滑坡了！</h5>
<h5 id="圣诞快乐啦everybody">圣诞快乐啦，everybody！</h5>
<h5 id="btw今天冬至北方饺子南方汤圆都安排起来">btw，今天冬至，北方饺子，南方汤圆，都安排起来！！！</h5>
]]></content>
        </item>
        
        <item>
            <title>Comparison Between Different DSPs</title>
            <link>https://www.marshalgao.com/comparison-between-different-dsps/</link>
            <pubDate>Thu, 10 Dec 2020 20:35:34 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/comparison-between-different-dsps/</guid>
            <description>由于目前国内外的广告投放平台众多，本文将腾讯广告、巨量引擎、百度信息流、新浪微博以及阿里妈妈广告投放平台进行对比，分析其内在流量类型以及投放测策略。
腾讯广告
腾讯广告依赖于社交流量，凭借QQ和微信两大社交平台，基本可以实现对全网用户的覆盖。除此，腾讯自身产品丰富，包括腾讯新闻、腾讯视频、微信朋友圈、公众号、QQ空间等，由此提供了非常多的流量媒体接口以及投放场景，这对于原生广告和信息流广告来说是十分重要的。
腾讯广告的流量由于是以社交为基础的，所以具备大而广的特点，且流量具有通用性，不会涉及模式兼容性的问题。同时，社交意味着极高的用户覆盖率以及用户粘性。从数据统计上来看，用户整体偏年轻化，适合做品牌宣传。而社交行为数据的积累，可以让用户画像更为精准，投放更准确，转化率比较可观。但在实际投放时，需要结合自身产品的用户群体，选择适当的媒体场景进行投放。
巨量引擎
巨量引擎是字节跳动旗下的营销平台，由于字节跳动拥有的产品众多，比如今日头条、抖音、懂车帝等。流量具备大而广的特点，深入不同的领域，虽然不像腾讯具备流量通用性，但在大多数领域都可以找到合适的投放媒体。
例如今日头条，作为目前国内咨询类信息流中最大的平台、一款基于数据挖掘的推荐引擎产品，其受众十分广泛，且行业覆盖率高。最重要的是，其拥有业界公认的最强人工智能算法。同时，其oCPM、CPA系统算法效果较好。在流量方面，用户每日使用时长超过76分钟，同时可以5秒快速推广，10s更新用户模型，所以广告的投放十分精准。但也由于其应用场景，使得最终的展现点击量比较大，转化率不是特别高。
再如抖音，用户十分活跃，在大数据上表现有明显的优势。而且其用户平均在线时长、广告曝光率较高，产品推送十分多元化。用户整体偏年轻化，活跃度和记忆度高，所以十分适合新品牌的品牌推广。由于其是一个内容分享平台，所以对广告的素材要求较高，同时也存在行业要求限制，比如游戏、生活、App、电商等泛流的产品投放效果较好。
百度信息流
百度的流量依托于搜索引擎，其主要是在旗下各大平台咨询流中穿插展现原生广告。由于其扎实的搜索基础，内容定向精准，转化率很高。但流量来源复杂，流量和成本较为不稳定。与此同时，在搜索广告领域，需要产品掌握好关键词，关键词词包是影响流量的重要因素，只有掌控好关键词，才能将产品精准投放到目标用户。百度的用户覆盖面很广，所以也是适合绝大多数产品投放的。
新浪微博
新浪微博是基于用户兴趣和开放关系的以移动使用为主的社交媒体平台，超级粉丝通（微博“粉丝通”）是基于用户属性和社交关系将企业广告精准地传递给粉丝和潜在粉丝的营销产品。它会根据用户属性和社交关系将信息精准的投放给目标人群。其商业化成熟，女性用户居多，偏年轻化，粉丝群体活跃，容易受舆论影响。说到底，新浪微博是一种更为宽泛的社交平台，其用户量巨大，日活高，并且具有多种广告形式，通过移动社交实现原生传播。但也是基于此，其行业趋向化明显。例如，生活类产品(例食品、服装等)、地区类产品(例摄影等)、游戏、APP、美妆等偏向女性化产品在新浪微博投放后的转化率很高。
阿里妈妈
阿里旗下虽然有淘宝、天猫、饿了么等，但归根结底，其流量依赖于电商，或者说流量依赖于交易行为，由此使得流量场景特征明显，通用性不高。而反观腾讯、字节流量的通用性，可以看出对于阿里妈妈需要具有不同的投放策略。由于电商的流量基本都被阿里囊括，所以采用原生的方式，在产品所属的生态链上投放，就会具有很高的转化率，但如果跨生态投放，效果将会大打折扣。其实，生态更适合做其他生态的搜索广告，用户搜索时带着需求来的，不会受到场景的影响。回到搜索广告的本质，其确实具备投放精准，转化率高的特点。</description>
            <content type="html"><![CDATA[<p>由于目前国内外的广告投放平台众多，本文将腾讯广告、巨量引擎、百度信息流、新浪微博以及阿里妈妈广告投放平台进行对比，分析其内在流量类型以及投放测策略。</p>
<p><strong>腾讯广告</strong></p>
<p>腾讯广告依赖于社交流量，凭借QQ和微信两大社交平台，基本可以实现对全网用户的覆盖。除此，腾讯自身产品丰富，包括腾讯新闻、腾讯视频、微信朋友圈、公众号、QQ空间等，由此提供了非常多的流量媒体接口以及投放场景，这对于原生广告和信息流广告来说是十分重要的。</p>
<p>腾讯广告的流量由于是以社交为基础的，所以具备大而广的特点，且流量具有通用性，不会涉及模式兼容性的问题。同时，社交意味着极高的用户覆盖率以及用户粘性。从数据统计上来看，用户整体偏年轻化，适合做品牌宣传。而社交行为数据的积累，可以让用户画像更为精准，投放更准确，转化率比较可观。但在实际投放时，需要结合自身产品的用户群体，选择适当的媒体场景进行投放。</p>
<p><strong>巨量引擎</strong></p>
<p>巨量引擎是字节跳动旗下的营销平台，由于字节跳动拥有的产品众多，比如今日头条、抖音、懂车帝等。流量具备大而广的特点，深入不同的领域，虽然不像腾讯具备流量通用性，但在大多数领域都可以找到合适的投放媒体。</p>
<p>例如今日头条，作为目前国内咨询类信息流中最大的平台、一款基于数据挖掘的推荐引擎产品，其受众十分广泛，且行业覆盖率高。最重要的是，其拥有业界公认的最强人工智能算法。同时，其oCPM、CPA系统算法效果较好。在流量方面，用户每日使用时长超过76分钟，同时可以5秒快速推广，10s更新用户模型，所以广告的投放十分精准。但也由于其应用场景，使得最终的展现点击量比较大，转化率不是特别高。</p>
<p>再如抖音，用户十分活跃，在大数据上表现有明显的优势。而且其用户平均在线时长、广告曝光率较高，产品推送十分多元化。用户整体偏年轻化，活跃度和记忆度高，所以十分适合新品牌的品牌推广。由于其是一个内容分享平台，所以对广告的素材要求较高，同时也存在行业要求限制，比如游戏、生活、App、电商等泛流的产品投放效果较好。</p>
<p><strong>百度信息流</strong></p>
<p>百度的流量依托于搜索引擎，其主要是在旗下各大平台咨询流中穿插展现原生广告。由于其扎实的搜索基础，内容定向精准，转化率很高。但流量来源复杂，流量和成本较为不稳定。与此同时，在搜索广告领域，需要产品掌握好关键词，关键词词包是影响流量的重要因素，只有掌控好关键词，才能将产品精准投放到目标用户。百度的用户覆盖面很广，所以也是适合绝大多数产品投放的。</p>
<p><strong>新浪微博</strong></p>
<p>新浪微博是基于用户兴趣和开放关系的以移动使用为主的社交媒体平台，超级粉丝通（微博“粉丝通”）是基于用户属性和社交关系将企业广告精准地传递给粉丝和潜在粉丝的营销产品。它会根据用户属性和社交关系将信息精准的投放给目标人群。其商业化成熟，女性用户居多，偏年轻化，粉丝群体活跃，容易受舆论影响。说到底，新浪微博是一种更为宽泛的社交平台，其用户量巨大，日活高，并且具有多种广告形式，通过移动社交实现原生传播。但也是基于此，其行业趋向化明显。例如，生活类产品(例食品、服装等)、地区类产品(例摄影等)、游戏、APP、美妆等偏向女性化产品在新浪微博投放后的转化率很高。</p>
<p><strong>阿里妈妈</strong></p>
<p>阿里旗下虽然有淘宝、天猫、饿了么等，但归根结底，其流量依赖于电商，或者说流量依赖于交易行为，由此使得流量场景特征明显，通用性不高。而反观腾讯、字节流量的通用性，可以看出对于阿里妈妈需要具有不同的投放策略。由于电商的流量基本都被阿里囊括，所以采用原生的方式，在产品所属的生态链上投放，就会具有很高的转化率，但如果跨生态投放，效果将会大打折扣。其实，生态更适合做其他生态的搜索广告，用户搜索时带着需求来的，不会受到场景的影响。回到搜索广告的本质，其确实具备投放精准，转化率高的特点。</p>
]]></content>
        </item>
        
        <item>
            <title>Advertising Creativity and Internet Thinking</title>
            <link>https://www.marshalgao.com/advertising-creativity-and-internet-thinking/</link>
            <pubDate>Sun, 06 Dec 2020 16:24:41 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/advertising-creativity-and-internet-thinking/</guid>
            <description>广告主最终的效果取决于两方面，一方面是广告创意，另一方面则是广告的精准投放。广告的精准投放需要依靠庞大的数据来勾勒出精准的用户画像，同时对推荐算法的技术也有着十分高的要求。当广告投放逐渐做到“千人千面”的今天，广告创意就会对最终的效果产生至关重要的影响。而且，在同等情况下，更好的创意会让广告主的广告在RTB中赢得优势。
互联网的广告创意与传统电视广告不同，需要具备互联网思维。其中，最重要的就是人与广告之间的联系，也就是互联网思维里提到的“连接”。这种“连接”可以分为两种，一种是主动的“连接”，另一种是被动的“连接”。
主动的“连接”可以理解为从产品本身出发，以产品为第一视角，讲述产品的核心理念与价值取向，产品是主角。同时，这类广告对用户的划分会更加粗糙，旨在表明自身产品应用场景之多，强行建立起产品与用户的联系。例如，中国移动4G以“和”为主题的创意广告。
  被动的“连接“可以理解为从产品的目标用户出发，以用户为第一视角，表明产品与用户的生活息息相关，产品仅仅是一个配角，用户才是真的主角。这一类广告对用户的划分会更为精细，因为同一类用户承担了主角的重任。这种广告产品与人的联系是被动的，如果观看者同时是产品的目标用户，会很容易产生情感共鸣，用户不由自主被动地与产品建立起了连接。例如，支付宝十周年的创意广告。
  综上所述，广告创意与对互联网广告的最终效果会起到至关重要的作用，短期内依靠精准投放带来得营效是不长久的，真正利用内容完成品牌的定位和口碑建设才是长久的。</description>
            <content type="html"><![CDATA[<p>广告主最终的效果取决于两方面，一方面是广告创意，另一方面则是广告的精准投放。广告的精准投放需要依靠庞大的数据来勾勒出精准的用户画像，同时对推荐算法的技术也有着十分高的要求。当广告投放逐渐做到“千人千面”的今天，广告创意就会对最终的效果产生至关重要的影响。而且，在同等情况下，更好的创意会让广告主的广告在RTB中赢得优势。</p>
<p>互联网的广告创意与传统电视广告不同，需要具备互联网思维。其中，最重要的就是人与广告之间的联系，也就是互联网思维里提到的“连接”。这种“连接”可以分为两种，一种是主动的“连接”，另一种是被动的“连接”。</p>
<p>主动的“连接”可以理解为从产品本身出发，以产品为第一视角，讲述产品的核心理念与价值取向，产品是主角。同时，这类广告对用户的划分会更加粗糙，旨在表明自身产品应用场景之多，强行建立起产品与用户的联系。例如，中国移动4G以“和”为主题的创意广告。</p>
<div class="iframe-container">
    <iframe src="//player.bilibili.com/player.html?aid=76874469&bvid=BV1DJ4119769&cid=131486877&page=1" allowfullscreen="true"> </iframe>
</div>
<p>被动的“连接“可以理解为从产品的目标用户出发，以用户为第一视角，表明产品与用户的生活息息相关，产品仅仅是一个配角，用户才是真的主角。这一类广告对用户的划分会更为精细，因为同一类用户承担了主角的重任。这种广告产品与人的联系是被动的，如果观看者同时是产品的目标用户，会很容易产生情感共鸣，用户不由自主被动地与产品建立起了连接。例如，支付宝十周年的创意广告。</p>
<div class="iframe-container">
    <iframe src="//player.bilibili.com/player.html?aid=56958107&bvid=BV1gx411d76w&cid=99482719&page=1" allowfullscreen="true"> </iframe>
</div>
<p>综上所述，广告创意与对互联网广告的最终效果会起到至关重要的作用，短期内依靠精准投放带来得营效是不长久的，真正利用内容完成品牌的定位和口碑建设才是长久的。</p>
]]></content>
        </item>
        
        <item>
            <title>The Logical Relationship of Advertising System</title>
            <link>https://www.marshalgao.com/the-logical-relationship-of-advertising-system/</link>
            <pubDate>Sun, 06 Dec 2020 14:20:55 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/the-logical-relationship-of-advertising-system/</guid>
            <description>本文将从宏观角度理清广告系统中DSP、SSP、DMP、ADX、RTB等概念的逻辑与关系。
 广告主  希望为自己的品牌提供曝光，增加营销的商家或个人   代理商  不擅长或无经验的广告主  使用代理商代办   擅长且有经验的广告主  不使代理商，直接与DSP沟通     DSP  相当于面向广告主的前端产品 但有的DSP自身不带数据，则需要与DMP进行合作 虽然在DSP上广告主已经设定好了一切需求，但真正进行广告投放时，会利用DMP与正在浏览的用户进行画像比对   DMP  整理分散的数据，构建用户画像 大多数情况下利用所有浏览器的cookie 但在Fackbook上还使用了其自身的CRM   SSP  相当于提供流量、广告位的企业前端 汇聚了很多的Publisher Publisher在SSP上管理自己的广告位   Publisher  流量的实际拥有者 可以是网页，又可以是免费型的App 可以加入到SSP   RTB  不是平台，也不是DSP的一部分 是一种技术概念，采取oCPA以及oCPM等方式    Ad Network  由于互联网广告的碎片性质，导致广告主需要与不同的Publisher进行谈判 Ad Network整合了相应的Publisher，方便广告主   ADX  由于Ad network之间可能存在互相符合用户画像的流量，所以要对Ad Network进行整合 ADX最终整合了Ad Network以及更多的Publisher 引入RTB技术   简化流程   现如今，每一个广告联盟对应一个DSP，所以ADX连接的DSP和SSP并不一定是一对一的关系，可能会存在更复杂的情况。</description>
            <content type="html"><![CDATA[<p>本文将从宏观角度理清广告系统中DSP、SSP、DMP、ADX、RTB等概念的逻辑与关系。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/e695b8e4bd8de5bba3e5918ae69eb6e6a78b-v1.jpg" alt=""></p>
<ul>
<li>广告主
<ul>
<li>希望为自己的品牌提供曝光，增加营销的商家或个人</li>
</ul>
</li>
<li>代理商
<ul>
<li>不擅长或无经验的广告主
<ul>
<li>使用代理商代办</li>
</ul>
</li>
<li>擅长且有经验的广告主
<ul>
<li>不使代理商，直接与DSP沟通</li>
</ul>
</li>
</ul>
</li>
<li>DSP
<ul>
<li>相当于面向广告主的前端产品</li>
<li>但有的DSP自身不带数据，则需要与DMP进行合作</li>
<li>虽然在DSP上广告主已经设定好了一切需求，但真正进行广告投放时，会利用DMP与正在浏览的用户进行画像比对</li>
</ul>
</li>
<li>DMP
<ul>
<li>整理分散的数据，构建用户画像</li>
<li>大多数情况下利用所有浏览器的cookie</li>
<li>但在Fackbook上还使用了其自身的CRM</li>
</ul>
</li>
<li>SSP
<ul>
<li>相当于提供流量、广告位的企业前端</li>
<li>汇聚了很多的Publisher</li>
<li>Publisher在SSP上管理自己的广告位</li>
</ul>
</li>
<li>Publisher
<ul>
<li>流量的实际拥有者</li>
<li>可以是网页，又可以是免费型的App</li>
<li>可以加入到SSP</li>
</ul>
</li>
<li>RTB
<ul>
<li>不是平台，也不是DSP的一部分</li>
<li>是一种技术概念，采取oCPA以及oCPM等方式
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/e68a95e5bdb1e789874.jpg" alt=""></li>
</ul>
</li>
<li>Ad Network
<ul>
<li>由于互联网广告的碎片性质，导致广告主需要与不同的Publisher进行谈判</li>
<li>Ad Network整合了相应的Publisher，方便广告主</li>
</ul>
</li>
<li>ADX
<ul>
<li>由于Ad network之间可能存在互相符合用户画像的流量，所以要对Ad Network进行整合</li>
<li>ADX最终整合了Ad Network以及更多的Publisher</li>
<li>引入RTB技术</li>
</ul>
</li>
<li>简化流程
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/e5bba3e5918ae69eb6e6a78be6b581e7a88b.jpg" alt=""></li>
</ul>
<p>现如今，每一个广告联盟对应一个DSP，所以ADX连接的DSP和SSP并不一定是一对一的关系，可能会存在更复杂的情况。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/20170526112448001.jpg" alt=""></p>
]]></content>
        </item>
        
        <item>
            <title>Is There a Ceiling for Tencent&#39;s Advertising Growth</title>
            <link>https://www.marshalgao.com/is-there-a-ceiling-for-tencents-advertising-growth/</link>
            <pubDate>Sat, 05 Dec 2020 14:28:19 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/is-there-a-ceiling-for-tencents-advertising-growth/</guid>
            <description>现如今，在双十一、618，商家除了在电商平台排兵布阵，同时也需要社区电商和社交电商的支持。
数据显示，中国社交电商的总零售额在2019年已经达到2万亿，增速高达63%。在这其中，微信小程序的GMV高达8000亿，同比增长超160%，在整个社交电商大盘中的占比为四成。社交电商的快速扩张，短期看不到尽头。截止今年8月，小程序商品交易GMV同比增长115%，品牌商家自营GMV同比增长210%。
腾讯虽然没有做电商平台的基因，但交易不等于电商，线上交易也不等于平台电商。通过将广告和零售双向打通实现战略层面的整体升维，既用广告促进商品交易，又用一站式转化效果吸引更多企业的广告投放，进而形成双向循环。换言之，腾讯在做的是线上交易可能产生的各种模式创新，比如借助短视频、直播和微信群等生态内场景直连交易。
品牌直营的机会
以美国为例的西方国家，线上交易的主力军是品牌直营渠道，每个品牌会建立自己的网站进行销售，建立起品牌与客户的直接联系，这就是DTC（Direct To Customer）。而在中国，80%以上的电商都是基于电商平台完成的，由于在消费者和品牌之间有一层电商品牌，无法做到真正的DTC。
在中国，影响DTC的因素很多。比如企业自身是否能独立获得可观的稳定流量？是否有在线支付及物流等基础设施的支撑？是否有技术实力支撑品牌更好地展示产品、讲好故事？因为这些问题，使得中国的电商交易一直处于中心化的格局。但这个格局在当下也不一定令品牌们满意，他们开始思考一些新的问题：流量增长会不会遭遇瓶颈？交易成本会不会越来越高？以及，我有没有途径更加直接地面对顾客？
C端消费者的购物心态在发生着巨大的变化，在追求大牌、比货比价的同时，他们更希望享受到附加功能、服务体验以及多样化的购买。例如，今年7月，耐克借助小程序完成了一轮新品首发，从开屏广告、朋友圈广告引流，再到邀请明星参与直播，再到后端领券转化和用户沉淀，最终获得97万观看量、5.2万条评论互动和34万用户点赞。最近，微信的群直播可以理解为在这一战略进行布局谋划。
DTC除了可以更好的让商家与用户进行沟通，同时还可以减少商家的成本，对于买卖双方来说是共赢的。腾讯曾提出过“公私域联动”的概念，公域指的是腾讯庞大的生态，私域指的是小程序、公众号、微信群这类能够反复触达用户的场景，而广告将成为联动公私域的介质。通过广告将庞大的公域流量引向不同品牌的商家私域，最终依靠小程序等场景实现品牌直营的本土化改造。最终实现商家与客户的直接联系。
930变革后的猛进
930变革是腾讯内部的一次事业群或者说是组织架构的调整，其目的是让企业从消费互联网向产业互联网升级。换言之，就是在to C业务的基础之上，开始拓展to B业务。最终的结果是，腾讯广告和腾讯智慧零售开始被腾讯赋予更多期待，他们是离消费者更近的那块拼图，也决定着广告主和腾讯本身能否通过这块拼图获得持续成长。
但合并并不意味着更多的流量必然会带来更多的收益。在互联网生态中，流量充足并不必然意味着更强的变现能力。变现至少受两个环节影响：首先，流量是否能够变现，这取决于消费者的态度；其次，流量的商业价值能在多大程度上释放，这又取决于平台方的能力。
让流量无限贴近交易
腾讯的AMS加快了广告产品的迭代速度，将分散的投放端口整合到了同一个投放平台，强化了对商品数据的理解以实现人货间的最优匹配。另外，腾讯广告还借助技术手段将触角伸向其他环节，例如通过选品中台为快消客户的产品研发提供来自消费数据侧的参考等等。
长久以来，广告销售采用的是以广告位资源为中心的批量交易模式，但除此，更应该加强对不同垂直类行业和交易场景的理解。广告平台在品牌直营领域，需要做好的是商业服务平台，提升广告主的ROI，而不仅仅是广告的售卖。由此形成的良性循环，会让更多的广告主青睐商业服务平台，从一定程度上将吃掉一部分电商份额。通过广告作为媒介，将公私域连接起来，实现品牌直营才是最终的目的。
原文链接
 突围电商,腾讯广告的增长有没有上限？  </description>
            <content type="html"><![CDATA[<p>现如今，在双十一、618，商家除了在电商平台排兵布阵，同时也需要社区电商和社交电商的支持。</p>
<p>数据显示，中国社交电商的总零售额在2019年已经达到2万亿，增速高达63%。在这其中，微信小程序的GMV高达8000亿，同比增长超160%，在整个社交电商大盘中的占比为四成。社交电商的快速扩张，短期看不到尽头。截止今年8月，小程序商品交易GMV同比增长115%，品牌商家自营GMV同比增长210%。</p>
<p>腾讯虽然没有做电商平台的基因，但交易不等于电商，线上交易也不等于平台电商。通过将广告和零售双向打通实现战略层面的整体升维，既用广告促进商品交易，又用一站式转化效果吸引更多企业的广告投放，进而形成双向循环。换言之，腾讯在做的是线上交易可能产生的各种模式创新，比如借助短视频、直播和微信群等生态内场景直连交易。</p>
<p><strong>品牌直营的机会</strong></p>
<p>以美国为例的西方国家，线上交易的主力军是品牌直营渠道，每个品牌会建立自己的网站进行销售，建立起品牌与客户的直接联系，这就是DTC（Direct To Customer）。而在中国，80%以上的电商都是基于电商平台完成的，由于在消费者和品牌之间有一层电商品牌，无法做到真正的DTC。</p>
<p>在中国，影响DTC的因素很多。比如企业自身是否能独立获得可观的稳定流量？是否有在线支付及物流等基础设施的支撑？是否有技术实力支撑品牌更好地展示产品、讲好故事？因为这些问题，使得中国的电商交易一直处于中心化的格局。但这个格局在当下也不一定令品牌们满意，他们开始思考一些新的问题：流量增长会不会遭遇瓶颈？交易成本会不会越来越高？以及，我有没有途径更加直接地面对顾客？</p>
<p>C端消费者的购物心态在发生着巨大的变化，在追求大牌、比货比价的同时，他们更希望享受到附加功能、服务体验以及多样化的购买。例如，今年7月，耐克借助小程序完成了一轮新品首发，从开屏广告、朋友圈广告引流，再到邀请明星参与直播，再到后端领券转化和用户沉淀，最终获得97万观看量、5.2万条评论互动和34万用户点赞。最近，微信的群直播可以理解为在这一战略进行布局谋划。</p>
<p>DTC除了可以更好的让商家与用户进行沟通，同时还可以减少商家的成本，对于买卖双方来说是共赢的。腾讯曾提出过“公私域联动”的概念，公域指的是腾讯庞大的生态，私域指的是小程序、公众号、微信群这类能够反复触达用户的场景，而广告将成为联动公私域的介质。通过广告将庞大的公域流量引向不同品牌的商家私域，最终依靠小程序等场景实现品牌直营的本土化改造。最终实现商家与客户的直接联系。</p>
<p><strong>930变革后的猛进</strong></p>
<p>930变革是腾讯内部的一次事业群或者说是组织架构的调整，其目的是让企业从消费互联网向产业互联网升级。换言之，就是在to C业务的基础之上，开始拓展to B业务。最终的结果是，腾讯广告和腾讯智慧零售开始被腾讯赋予更多期待，他们是离消费者更近的那块拼图，也决定着广告主和腾讯本身能否通过这块拼图获得持续成长。</p>
<p>但合并并不意味着更多的流量必然会带来更多的收益。在互联网生态中，流量充足并不必然意味着更强的变现能力。变现至少受两个环节影响：首先，流量是否能够变现，这取决于消费者的态度；其次，流量的商业价值能在多大程度上释放，这又取决于平台方的能力。</p>
<p><strong>让流量无限贴近交易</strong></p>
<p>腾讯的AMS加快了广告产品的迭代速度，将分散的投放端口整合到了同一个投放平台，强化了对商品数据的理解以实现人货间的最优匹配。另外，腾讯广告还借助技术手段将触角伸向其他环节，例如通过选品中台为快消客户的产品研发提供来自消费数据侧的参考等等。</p>
<p>长久以来，广告销售采用的是以广告位资源为中心的批量交易模式，但除此，更应该加强对不同垂直类行业和交易场景的理解。广告平台在品牌直营领域，需要做好的是商业服务平台，提升广告主的ROI，而不仅仅是广告的售卖。由此形成的良性循环，会让更多的广告主青睐商业服务平台，从一定程度上将吃掉一部分电商份额。通过广告作为媒介，将公私域连接起来，实现品牌直营才是最终的目的。</p>
<p><strong>原文链接</strong></p>
<ul>
<li><a href="https://mp.weixin.qq.com/s/4OXqAzRjkBPvDhnu1uy9Mw">突围电商,腾讯广告的增长有没有上限？</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Media Management Platform (Take E-Commerce as an Example)</title>
            <link>https://www.marshalgao.com/media-management-platform-take-e-commerce-as-an-example/</link>
            <pubDate>Fri, 04 Dec 2020 16:25:08 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/media-management-platform-take-e-commerce-as-an-example/</guid>
            <description>电商中大部分的页面还是写死的，但在一些大型活动节，商家可以自己定制化活动页面。但数量十分有限，因为平台要考虑算法运算效率以及加载速度等诸多因素。而活动的促销页面类似于广告中的落地页。通过媒体管理平台或者内容管理平台（CMS）进行页面动态配置。后文将以电商为例说明页面动态配置的逻辑。
基础组件
组件是动态页面的基础，提供给用户编辑具体展示的信息。有许多类型的组件：图片轮播、ICON、优惠券等，每种组件都可以有多个不同的样式，选择内部展示的内容或者自定义。用的最常见的就是链接，组件显示样式虽然多样，但是点击之后通往的页面选择库却是共通的。例如：新的活动页面、商品详情页、商品聚合页、购物车、客服等等。
基础组件的定义和解析是自定义页面的核心，不同的组件有不同的功能，表示不同类型的内容。每个组件都需要单独设计，定义其规则和样式。 例如ICON、图片轮播就是简单的图片展示，商品排名对应的算法较为复杂，需要实时去取动态排名。
位置+内容
有了组件之后，用户在设置或者系统在解析的时候，首先要确定组件在自定义页面中的位置。位置可以称为“楼层”，每个页面的各楼层可以定义名称、设置背景、配置内容，目前最主流的交互是拖动组件到相应的位置，设置内容之后实时预览，自定义页面动态可视化。
动态页面
对于整个动态页面，需要定义生效时间、结束时间、活动页面名称等基础信息。设置之后可生成相应的链接进行预览。
动态页面是由不同的组件内容构成，首先按照各组件位置去解析，然后再去解析组件的内容（样式、图片/商品、背景、链接等）。按照上图的反向流程走，就能解析出对应的自定义页面内容。
首页设置也是相同，类似自定义页面，可动态设置首页内容，动态添加自定义组件。目前绝大部分电商首页都是动态配置，有着丰富的自定义内容。</description>
            <content type="html"><![CDATA[<p>电商中大部分的页面还是写死的，但在一些大型活动节，商家可以自己定制化活动页面。但数量十分有限，因为平台要考虑算法运算效率以及加载速度等诸多因素。而活动的促销页面类似于广告中的落地页。通过媒体管理平台或者内容管理平台（CMS）进行页面动态配置。后文将以电商为例说明页面动态配置的逻辑。</p>
<p><strong>基础组件</strong></p>
<p>组件是动态页面的基础，提供给用户编辑具体展示的信息。有许多类型的组件：图片轮播、ICON、优惠券等，每种组件都可以有多个不同的样式，选择内部展示的内容或者自定义。用的最常见的就是链接，组件显示样式虽然多样，但是点击之后通往的页面选择库却是共通的。例如：新的活动页面、商品详情页、商品聚合页、购物车、客服等等。</p>
<p>基础组件的定义和解析是自定义页面的核心，不同的组件有不同的功能，表示不同类型的内容。每个组件都需要单独设计，定义其规则和样式。 例如ICON、图片轮播就是简单的图片展示，商品排名对应的算法较为复杂，需要实时去取动态排名。</p>
<p><strong>位置+内容</strong></p>
<p>有了组件之后，用户在设置或者系统在解析的时候，首先要确定组件在自定义页面中的位置。位置可以称为“楼层”，每个页面的各楼层可以定义名称、设置背景、配置内容，目前最主流的交互是拖动组件到相应的位置，设置内容之后实时预览，自定义页面动态可视化。</p>
<p><strong>动态页面</strong></p>
<p>对于整个动态页面，需要定义生效时间、结束时间、活动页面名称等基础信息。设置之后可生成相应的链接进行预览。</p>
<p>动态页面是由不同的组件内容构成，首先按照各组件位置去解析，然后再去解析组件的内容（样式、图片/商品、背景、链接等）。按照上图的反向流程走，就能解析出对应的自定义页面内容。</p>
<p>首页设置也是相同，类似自定义页面，可动态设置首页内容，动态添加自定义组件。目前绝大部分电商首页都是动态配置，有着丰富的自定义内容。</p>
]]></content>
        </item>
        
        <item>
            <title>Advertising Scheduling System</title>
            <link>https://www.marshalgao.com/advertising-scheduling-system/</link>
            <pubDate>Fri, 04 Dec 2020 15:56:27 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/advertising-scheduling-system/</guid>
            <description>广告学中的排期方式
 持续式排期  不受任何条件影响，一年四季持续投放 广告持续性强 简单 比如日常快销产品的投放   起伏式排期  广告期和无广告期交替出现 挑选一年中对产品销售影响最大的时段进行投放 比如羽绒服广告   脉冲式排期  持续式排期和起伏式排期的结合 全年持续投放，但一直维持较低水平 需求量旺盛时，加大投放 比如饮料广告（夏季大量投放，但全年投放）   集中式排期  在同一媒介或平台集中投放 一般集中于季节或者节日 比如双十一的电商广告投放    BB Part
广告排期可以简单理解为对广告档期的编排。在腾讯的智能投放体系中，先通过创意创造出广告，在寻找目标人群，实现精准投放。但投放的过程中必然会涉及到排期，所以广告排期其实也是智能投放闭环中的一节。而且，对于广告学中的排期系统，是需要后续监播和反馈，但这一过程在智能投放闭环中，被迁移到了投放结果分析或报告产出的环节。互联网广告的排期会结合出价、内容、创意等要素综合考虑，一定程度上超越了传统广告学的排期概念。</description>
            <content type="html"><![CDATA[<p><strong>广告学中的排期方式</strong></p>
<ul>
<li>持续式排期
<ul>
<li>不受任何条件影响，一年四季持续投放</li>
<li>广告持续性强</li>
<li>简单</li>
<li>比如日常快销产品的投放</li>
</ul>
</li>
<li>起伏式排期
<ul>
<li>广告期和无广告期交替出现</li>
<li>挑选一年中对产品销售影响最大的时段进行投放</li>
<li>比如羽绒服广告</li>
</ul>
</li>
<li>脉冲式排期
<ul>
<li>持续式排期和起伏式排期的结合</li>
<li>全年持续投放，但一直维持较低水平</li>
<li>需求量旺盛时，加大投放</li>
<li>比如饮料广告（夏季大量投放，但全年投放）</li>
</ul>
</li>
<li>集中式排期
<ul>
<li>在同一媒介或平台集中投放</li>
<li>一般集中于季节或者节日</li>
<li>比如双十一的电商广告投放</li>
</ul>
</li>
</ul>
<p><strong>BB Part</strong></p>
<p>广告排期可以简单理解为对广告档期的编排。在腾讯的智能投放体系中，先通过创意创造出广告，在寻找目标人群，实现精准投放。但投放的过程中必然会涉及到排期，所以广告排期其实也是智能投放闭环中的一节。而且，对于广告学中的排期系统，是需要后续监播和反馈，但这一过程在智能投放闭环中，被迁移到了投放结果分析或报告产出的环节。互联网广告的排期会结合出价、内容、创意等要素综合考虑，一定程度上超越了传统广告学的排期概念。</p>
]]></content>
        </item>
        
        <item>
            <title>Traffic Conversion</title>
            <link>https://www.marshalgao.com/traffic-conversion/</link>
            <pubDate>Thu, 03 Dec 2020 16:26:03 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/traffic-conversion/</guid>
            <description>影响流量转化的因素
 获客方式 落地页设计 转化分析 流量承接  获客方式
 准确性  目标客户是否正确 客户需求是否真实 垃圾流量的比例 刷单是否存在 场景  在做保险投放的时候，我们通过搜索关键词竞价，假如关键词是“高性价比 重疾险” 那么可能有两类人都会搜索这个关键词，一类是想了解重疾险，并且有意愿购买的人，这是潜在的目标用户，还有一部分是保险代理人，他们可能会了解市面上新出来的重疾险产品，想去代理这些产品，这类人并不是目标用户     可追溯性  是否可统计来源 是否链路连续性 数据是否准确 分期过程是否正确 场景  如果要衡量转化效果，投放广告必须是可追溯的 广告曝光数，点击数，广告落地页浏览数，停留时间，页面的点击数，每个环节的数据都有了，才能分析出具体哪个环节影响转化 线下广告不具备可追溯性，因为曝光数和点击数是缺失的 还有一部分广告形式，比如公众号推文中嵌入二维码，虽然有文章阅读数，但是阅读文章不代表能够看到文章底部的二维码广告，很有可能用户阅读到一半就关闭了，所以一般公众号软文推广的可追溯性比较差     竞争程度  行业竞争程度 渠道同质性 广告平台的限制 渠道本身的特性 场景  对于信息流类广告，很多公司都会竞争，如果你进入的比较晚，就需要考虑之前竞品公司投放广告的目标人群，能做到差异化是最好的 在做保险业务的时候，选了几个公众号投放，有些公众号一个月内会接好多互联网保险公司的软文，如果你这个时候再去投，转化效果就非常差      落地页设计
 基本要素  品牌标识和logo 品牌文案 引导文案 产品卖点 信任背书 产品案例 期望的信息输入框（期望的用户行为） 用户的使用评价 已有的销量 官方的FAQ   落地页的开发和设计，需要结合产品、UED、技术、运营、BI等部门一起协作，同时对不同版本的落地页进行测试，以此来确定那个版本的落地页的转化效果最好 广告的推广转化效果由创意和投放两方决定，自身质量就是创意，即落地页，多重视都不过分，而投放只是一种机遇，一种手段  类比茅台发展史    转化分析</description>
            <content type="html"><![CDATA[<p><strong>影响流量转化的因素</strong></p>
<ul>
<li>获客方式</li>
<li>落地页设计</li>
<li>转化分析</li>
<li>流量承接</li>
</ul>
<p><strong>获客方式</strong></p>
<ul>
<li>准确性
<ul>
<li>目标客户是否正确</li>
<li>客户需求是否真实</li>
<li>垃圾流量的比例</li>
<li>刷单是否存在</li>
<li>场景
<ul>
<li>在做保险投放的时候，我们通过搜索关键词竞价，假如关键词是“高性价比 重疾险”</li>
<li>那么可能有两类人都会搜索这个关键词，一类是想了解重疾险，并且有意愿购买的人，这是潜在的目标用户，还有一部分是保险代理人，他们可能会了解市面上新出来的重疾险产品，想去代理这些产品，这类人并不是目标用户</li>
</ul>
</li>
</ul>
</li>
<li>可追溯性
<ul>
<li>是否可统计来源</li>
<li>是否链路连续性</li>
<li>数据是否准确</li>
<li>分期过程是否正确</li>
<li>场景
<ul>
<li>如果要衡量转化效果，投放广告必须是可追溯的</li>
<li>广告曝光数，点击数，广告落地页浏览数，停留时间，页面的点击数，每个环节的数据都有了，才能分析出具体哪个环节影响转化</li>
<li>线下广告不具备可追溯性，因为曝光数和点击数是缺失的</li>
<li>还有一部分广告形式，比如公众号推文中嵌入二维码，虽然有文章阅读数，但是阅读文章不代表能够看到文章底部的二维码广告，很有可能用户阅读到一半就关闭了，所以一般公众号软文推广的可追溯性比较差</li>
</ul>
</li>
</ul>
</li>
<li>竞争程度
<ul>
<li>行业竞争程度</li>
<li>渠道同质性</li>
<li>广告平台的限制</li>
<li>渠道本身的特性</li>
<li>场景
<ul>
<li>对于信息流类广告，很多公司都会竞争，如果你进入的比较晚，就需要考虑之前竞品公司投放广告的目标人群，能做到差异化是最好的</li>
<li>在做保险业务的时候，选了几个公众号投放，有些公众号一个月内会接好多互联网保险公司的软文，如果你这个时候再去投，转化效果就非常差</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>落地页设计</strong></p>
<ul>
<li>基本要素
<ul>
<li>品牌标识和logo</li>
<li>品牌文案</li>
<li>引导文案</li>
<li>产品卖点</li>
<li>信任背书</li>
<li>产品案例</li>
<li>期望的信息输入框（期望的用户行为）</li>
<li>用户的使用评价</li>
<li>已有的销量</li>
<li>官方的FAQ</li>
</ul>
</li>
<li>落地页的开发和设计，需要结合产品、UED、技术、运营、BI等部门一起协作，同时对不同版本的落地页进行测试，以此来确定那个版本的落地页的转化效果最好</li>
<li>广告的推广转化效果由创意和投放两方决定，自身质量就是创意，即落地页，多重视都不过分，而投放只是一种机遇，一种手段
<ul>
<li>类比茅台发展史</li>
</ul>
</li>
</ul>
<p><strong>转化分析</strong></p>
<ul>
<li>广告平台数据
<ul>
<li>广告位</li>
<li>曝光量</li>
<li>点击量</li>
</ul>
</li>
<li>落地页过程转化数据
<ul>
<li>落地页UV （Unique Visitor）</li>
<li>申请注册数</li>
<li>验证码点击</li>
<li>填单数</li>
<li>有一些落地页不仅仅是一个页面，可能涉及到多个连续的信息收集页，这里面每个页面进入次数，流失率都是需要统计的</li>
</ul>
</li>
<li>业务数据
<ul>
<li>一般和公司业务比较耦合，以电商数据为例，包括商品浏览数，订单创建数，支付笔数，退款笔数</li>
</ul>
</li>
<li>漏斗模型
<ul>
<li>广告曝光量 -&gt; 点击量 -&gt; 落地页UV -&gt; 落地页填单数 -&gt; 订单创建数 -&gt; 订单支付数</li>
<li>衡量广告效果，落地页效果，以及业务效果</li>
</ul>
</li>
</ul>
<p><strong>流量承接</strong></p>
<ul>
<li>通用平台流量获取
<ul>
<li>类别
<ul>
<li>手机号、App</li>
<li>品牌、IP、网红</li>
<li>网站、店铺</li>
</ul>
</li>
<li>优劣
<ul>
<li>任何投放平台都支持</li>
<li>用户对手机号比较敏感，下载App转化比较低</li>
<li>部分流量通过品牌和IP承接</li>
</ul>
</li>
</ul>
</li>
<li>微信体系流量获取
<ul>
<li>类别
<ul>
<li>微信号、微信群、企业微信</li>
<li>订阅号、服务号</li>
<li>小程序</li>
</ul>
</li>
<li>优劣
<ul>
<li>适合在微信体系内获取流量</li>
<li>转化率比手机号和下载app要好</li>
<li>适合私域流量运营</li>
</ul>
</li>
</ul>
</li>
<li>考虑后续用户运营基于什么方式
<ul>
<li>例如，用小程序承接流量，虽然可以利用腾讯的社交裂变，但跨平台如何转化</li>
<li>小程序不能人工主动推送，运营手段十分有限</li>
</ul>
</li>
<li>实际过程中要尽量选择简单的流量承接方式，但愿意接受复杂度高的流量承接方式的用户质量一般较高</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Internet Mobile Advertising</title>
            <link>https://www.marshalgao.com/internet-mobile-advertising/</link>
            <pubDate>Thu, 03 Dec 2020 14:23:20 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/internet-mobile-advertising/</guid>
            <description>定义
 移动互联网广告是通过移动设备（手机、PSP、平板电脑等）访问移动App或移动网页时显示的广告 大致分类  Web广告  基于html框架 显示在浏览器 网站开发者获益 市场份额小   App广告  基于OS框架 显示在App内 主流形式      类型
 抛开Web广告，可将互联网广告分为  按App所属行业  搜索广告 电商广告 门户或新闻广告 垂直广告（即竖屏视频） 视频广告（即横屏视频）   按广告自身属性（与广告主投放位置直接相关）  开屏广告  出现在App启动加载时，又叫启动页广告 尺寸大（App内最大的广告） 可跳过 可见性高、广告效果好   横幅广告  网络广告最早采用的形式 以文字、图片等富媒体形式 展示在App首页、发现页、专题详情页等页面的顶部（含下拉刷新）、底部或者中部 尺寸小 位置偏（照顾用户体验，避免误触） 支持轮播（动态展示不同广告主的文字链和图片） 难以吸引用户注意力，广告可见性差，广告效果差   插屏广告  又叫触发式广告 在用户做出相应操作（如开启、暂停、过关、跳转、退出）后 弹出以图片、动图、视频等为表现形式的半屏或者全屏广告 曝光性强，吸引用户注意力 容易引起用户反感（打断用户正常App的操作） 影响用户体验，广告可见性一般，广告效果一般   贴片广告  将广告内容贴入视频之中 视频贴片  将5s-60s不等的横版视频广告，添加至视频播放前、视频播放中或视频播放后这三个位置   创可贴  将图片/动图等元素放在正在播放的视频中 可结合剧情设计，尺寸小的特点，使得用户体验更好，广告可见性更高、广告效果更好   整体广告效果和视频类型和质量相关较为密切，一般以传统采买、竞标的交易模式   信息流广告  出现于有内容产出的App，是与App的日常内容（如一则资讯、动态、图片、视频）融为一体的广告形式 延展性、可玩性最强的广告位，目前可记录的形式就有数十种，文字链，小图、组图、大图、竖版视频等等 由于原生性、内容性较强，信息流广告能够最大限度地保护用户体验，还能形成二次传播，广告效果优于大多数广告位   搜索广告  也是触发式广告 用户搜索关键词后，在搜索联想、搜索结果中出现广告 一般为广告主的App/商品，或者是带有推广性质的内容，以信息流的形式呈现 一般是应用商店，电商，搜索工具类的主流广告位，近年来，大型社交、资讯类也在加快布局 转化效果最强的广告位，能够形成用户搜索 -&amp;gt; 广告引导 -&amp;gt; 完成转化（下载/下单）的环路 但想提供搜索广告的App，需要一定的搜索基数以及口碑（用户信赖度），所以目前在移动广告中，是应用门槛最高的广告位   激励广告  利用激励让用户接受广告或做出指定行为比如下载APP、观看视频等 分为积分墙和激励视频两种形式  前者用户可以完成指定操作获取积分，并兑换奖励 后者则让用户完成指定操作，获取权益，比如游戏复活，新增特权等   互惠互利 点击成本低，广告效果好        策略</description>
            <content type="html"><![CDATA[<p><strong>定义</strong></p>
<ul>
<li>移动互联网广告是通过移动设备（手机、PSP、平板电脑等）访问移动App或移动网页时显示的广告</li>
<li>大致分类
<ul>
<li>Web广告
<ul>
<li>基于html框架</li>
<li>显示在浏览器</li>
<li>网站开发者获益</li>
<li>市场份额小</li>
</ul>
</li>
<li>App广告
<ul>
<li>基于OS框架</li>
<li>显示在App内</li>
<li>主流形式</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>类型</strong></p>
<ul>
<li>抛开Web广告，可将互联网广告分为
<ul>
<li>按App所属行业
<ul>
<li>搜索广告</li>
<li>电商广告</li>
<li>门户或新闻广告</li>
<li>垂直广告（即竖屏视频）</li>
<li>视频广告（即横屏视频）</li>
</ul>
</li>
<li>按广告自身属性（与广告主投放位置直接相关）
<ul>
<li>开屏广告
<ul>
<li>出现在App启动加载时，又叫启动页广告</li>
<li>尺寸大（App内最大的广告）</li>
<li>可跳过</li>
<li>可见性高、广告效果好</li>
</ul>
</li>
<li>横幅广告
<ul>
<li>网络广告最早采用的形式</li>
<li>以文字、图片等富媒体形式</li>
<li>展示在App首页、发现页、专题详情页等页面的顶部（含下拉刷新）、底部或者中部</li>
<li>尺寸小</li>
<li>位置偏（照顾用户体验，避免误触）</li>
<li>支持轮播（动态展示不同广告主的文字链和图片）</li>
<li>难以吸引用户注意力，广告可见性差，广告效果差</li>
</ul>
</li>
<li>插屏广告
<ul>
<li>又叫触发式广告</li>
<li>在用户做出相应操作（如开启、暂停、过关、跳转、退出）后</li>
<li>弹出以图片、动图、视频等为表现形式的半屏或者全屏广告</li>
<li>曝光性强，吸引用户注意力</li>
<li>容易引起用户反感（打断用户正常App的操作）</li>
<li>影响用户体验，广告可见性一般，广告效果一般</li>
</ul>
</li>
<li>贴片广告
<ul>
<li>将广告内容贴入视频之中</li>
<li>视频贴片
<ul>
<li>将5s-60s不等的横版视频广告，添加至视频播放前、视频播放中或视频播放后这三个位置</li>
</ul>
</li>
<li>创可贴
<ul>
<li>将图片/动图等元素放在正在播放的视频中</li>
<li>可结合剧情设计，尺寸小的特点，使得用户体验更好，广告可见性更高、广告效果更好</li>
</ul>
</li>
<li>整体广告效果和视频类型和质量相关较为密切，一般以传统采买、竞标的交易模式</li>
</ul>
</li>
<li>信息流广告
<ul>
<li>出现于有内容产出的App，是与App的日常内容（如一则资讯、动态、图片、视频）融为一体的广告形式</li>
<li>延展性、可玩性最强的广告位，目前可记录的形式就有数十种，文字链，小图、组图、大图、竖版视频等等</li>
<li>由于原生性、内容性较强，信息流广告能够最大限度地保护用户体验，还能形成二次传播，广告效果优于大多数广告位</li>
</ul>
</li>
<li>搜索广告
<ul>
<li>也是触发式广告</li>
<li>用户搜索关键词后，在搜索联想、搜索结果中出现广告</li>
<li>一般为广告主的App/商品，或者是带有推广性质的内容，以信息流的形式呈现</li>
<li>一般是应用商店，电商，搜索工具类的主流广告位，近年来，大型社交、资讯类也在加快布局</li>
<li>转化效果最强的广告位，能够形成用户搜索 -&gt; 广告引导 -&gt; 完成转化（下载/下单）的环路</li>
<li>但想提供搜索广告的App，需要一定的搜索基数以及口碑（用户信赖度），所以目前在移动广告中，是应用门槛最高的广告位</li>
</ul>
</li>
<li>激励广告
<ul>
<li>利用激励让用户接受广告或做出指定行为比如下载APP、观看视频等</li>
<li>分为积分墙和激励视频两种形式
<ul>
<li>前者用户可以完成指定操作获取积分，并兑换奖励</li>
<li>后者则让用户完成指定操作，获取权益，比如游戏复活，新增特权等</li>
</ul>
</li>
<li>互惠互利</li>
<li>点击成本低，广告效果好</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>策略</strong></p>
<ul>
<li>原生广告
<ul>
<li>内嵌于信息流，成为内容的一部分</li>
<li>具有价值性、原生性、主动性</li>
</ul>
</li>
<li>互动广告
<ul>
<li>注重与用户的交互</li>
<li>传统活动广告
<ul>
<li>广告即活动</li>
<li>比如抽奖转盘、刮刮卡抽奖</li>
</ul>
</li>
<li>互动视频
<ul>
<li>本质上也是活动广告，但效果以及参与度更高</li>
<li>游戏广告主根据游戏真实场景进行简化，完成用户的试玩体验</li>
<li>品牌广告剧情类可以按照自己的喜好选择剧情发展</li>
</ul>
</li>
</ul>
</li>
<li>联动广告
<ul>
<li>概念源于运镜手法 -&gt; 一镜到底</li>
<li>主流是开屏广告与信息流广告的结合</li>
<li>特点
<ul>
<li>高触达、高可见
<ul>
<li>从开屏到信息流的路径式覆盖，双重曝光加持，强化用户对广告的记忆度的同时激发用户对内容的深层兴趣</li>
</ul>
</li>
<li>高效传播
<ul>
<li>支持静态、动态等多种创意展示形态，不同的传播形式触达，降低曝光损耗，提升传播效率</li>
</ul>
</li>
<li>高性价比
<ul>
<li>多广告位一次性采买，以更低价格达到双优质资源联动效果</li>
</ul>
</li>
</ul>
</li>
<li>未来玩法很多，因为结合方式不同</li>
</ul>
</li>
</ul>
<p><strong>趋势</strong></p>
<ul>
<li>移动份额继续扩大、程序化模式更加流行</li>
<li>效果广告在经济寒冬期优势凸显，直接与销售KPI相关</li>
<li>小程序生态的多种可能性
<ul>
<li>但就目前来看，生态仍需完善</li>
</ul>
</li>
<li>监管体系完善</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Recommendation Algorithm and Placement Optimization Strategy</title>
            <link>https://www.marshalgao.com/recommendation-algorithm-and-placement-optimization-strategy/</link>
            <pubDate>Wed, 02 Dec 2020 14:40:52 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/recommendation-algorithm-and-placement-optimization-strategy/</guid>
            <description>广告推荐算法（以今日头条为例）
 三个纬度变量输入  内容特征  为文章、图片、视频等内容进行画像，提取关键字、tag标签等实现语义识别，为以后推荐给用户做准备   用户特征  根据用户行为进行用户画像勾勒，多角度且具体   环境特征  比如获取你当前所在位置是否在旅游区，这个可以通过获取你实时位置来实现，然后与你之前经常出现的所在地进行对比等方式确认当前状态，是在家还是在旅游     内容干预  可以量化的指标可以体现一些具体信息，但是完全靠这个并不全面，比如刷评论、转发等情况，可能就会迷惑后台计算机的分析，纯粹靠这些数据进行推荐是有问题的  比如当前社会热点，虽然你的文章很热，但是热点已过，也不会因为文章的点击率大而继续给你推送   需要人工对这些数据内容进行维护设置，以完善推荐机制   因地制宜与算法实验平台  因地制宜  不同推荐场景需要不同的模型架构，比如小视频，是短时投入，客户会很少计较时间成本，所以关键的推荐机制可能并不是你的用户画像特征，而是根据视频的点击率进行推荐，点击率越大的视频肯定越容易吸引用户的兴趣 文章需要投入时间成本较高，精准投送要求会比较高，所以各类内容推荐算法会根据不同的特点进行不一样的推荐机制，需要不断尝试优化   算法实验平台  比如第一种算法投入测试，推送10000条信息，实际点击有效率是50%，相当于一条测试数据 后面再对其他多种算法测试，最终选取点击率最高的算法进行应用     四类特征相互作用  相关性特征  用户画像与内容画像的匹配   环境特征 热度特征  当用户第一次注册登录头条（冷启动阶段），没有用户画像 根据当前社会热点呀、文章阅读量高低排名等一些能代表普遍群体感受的指标进行推送选择   协同特征  通过你的行为、画像、环境等各类指标进行模型分析后，适合推荐给你的文章太少（算法越推越窄） 可以寻找跟你特征相同的用户，比如跟你同一个年龄段、同一个性别、同一个地区等相似用户的兴趣给你进行推荐，可以作为一个推荐的补充，以实现比较好的推荐效果     基于召回策略，缩小推荐内容库，减少计算推荐成本  如果每一次的推荐都依赖这个最大的模型，成本确实太高，所以需要简化 召回  对符合条件的结果进行排序，以决定给你推荐文章的顺序   推荐算法是否有效取决于召回率  比如，所有可供推荐的文章库里共有40篇文章与你的用户画像相关，实际通过推荐算法推荐给你了20篇，但实际上有10篇是你真正喜欢的文章，则召回率就是10/40=0.</description>
            <content type="html"><![CDATA[<p><strong>广告推荐算法（以今日头条为例）</strong></p>
<ul>
<li>三个纬度变量输入
<ul>
<li>内容特征
<ul>
<li>为文章、图片、视频等内容进行画像，提取关键字、tag标签等实现语义识别，为以后推荐给用户做准备</li>
</ul>
</li>
<li>用户特征
<ul>
<li>根据用户行为进行用户画像勾勒，多角度且具体</li>
</ul>
</li>
<li>环境特征
<ul>
<li>比如获取你当前所在位置是否在旅游区，这个可以通过获取你实时位置来实现，然后与你之前经常出现的所在地进行对比等方式确认当前状态，是在家还是在旅游</li>
</ul>
</li>
</ul>
</li>
<li>内容干预
<ul>
<li>可以量化的指标可以体现一些具体信息，但是完全靠这个并不全面，比如刷评论、转发等情况，可能就会迷惑后台计算机的分析，纯粹靠这些数据进行推荐是有问题的
<ul>
<li>比如当前社会热点，虽然你的文章很热，但是热点已过，也不会因为文章的点击率大而继续给你推送</li>
</ul>
</li>
<li>需要人工对这些数据内容进行维护设置，以完善推荐机制</li>
</ul>
</li>
<li>因地制宜与算法实验平台
<ul>
<li>因地制宜
<ul>
<li>不同推荐场景需要不同的模型架构，比如小视频，是短时投入，客户会很少计较时间成本，所以关键的推荐机制可能并不是你的用户画像特征，而是根据视频的点击率进行推荐，点击率越大的视频肯定越容易吸引用户的兴趣</li>
<li>文章需要投入时间成本较高，精准投送要求会比较高，所以各类内容推荐算法会根据不同的特点进行不一样的推荐机制，需要不断尝试优化</li>
</ul>
</li>
<li>算法实验平台
<ul>
<li>比如第一种算法投入测试，推送10000条信息，实际点击有效率是50%，相当于一条测试数据</li>
<li>后面再对其他多种算法测试，最终选取点击率最高的算法进行应用</li>
</ul>
</li>
</ul>
</li>
<li>四类特征相互作用
<ul>
<li>相关性特征
<ul>
<li>用户画像与内容画像的匹配</li>
</ul>
</li>
<li>环境特征</li>
<li>热度特征
<ul>
<li>当用户第一次注册登录头条（冷启动阶段），没有用户画像</li>
<li>根据当前社会热点呀、文章阅读量高低排名等一些能代表普遍群体感受的指标进行推送选择</li>
</ul>
</li>
<li>协同特征
<ul>
<li>通过你的行为、画像、环境等各类指标进行模型分析后，适合推荐给你的文章太少（算法越推越窄）</li>
<li>可以寻找跟你特征相同的用户，比如跟你同一个年龄段、同一个性别、同一个地区等相似用户的兴趣给你进行推荐，可以作为一个推荐的补充，以实现比较好的推荐效果</li>
</ul>
</li>
</ul>
</li>
<li>基于召回策略，缩小推荐内容库，减少计算推荐成本
<ul>
<li>如果每一次的推荐都依赖这个最大的模型，成本确实太高，所以需要简化</li>
<li>召回
<ul>
<li>对符合条件的结果进行排序，以决定给你推荐文章的顺序</li>
</ul>
</li>
<li>推荐算法是否有效取决于召回率
<ul>
<li>比如，所有可供推荐的文章库里共有40篇文章与你的用户画像相关，实际通过推荐算法推荐给你了20篇，但实际上有10篇是你真正喜欢的文章，则召回率就是10/40=0.25，精度是10/20=0.5</li>
</ul>
</li>
</ul>
</li>
<li>文本特征
<ul>
<li>避免推荐文章重复，借助文本特征可以筛选哪些文章说的是一个事儿</li>
<li>没有文本特征，推荐引擎无法工作</li>
<li>文本特征颗粒度越细，冷启动能力越强
<ul>
<li>头条用sina微博账号、微信账号登录时的授权，分析你曾经关注的微博账号、微信公账号信息等，作为冷启动时的用户画像数据</li>
</ul>
</li>
</ul>
</li>
<li>隐式语义特征
<ul>
<li>反应一个公司的自然语言处理（NLP）能力</li>
<li>学习大量文章，实现语义关联
<ul>
<li>比如，apple和苹果，电脑和计算机</li>
<li>当搜索apple时，apple和苹果的文章都会被推荐</li>
</ul>
</li>
</ul>
</li>
<li>用户自然标签之外的考量
<ul>
<li>过滤噪声
<ul>
<li>过滤停留时间短的点击，打击标题党</li>
</ul>
</li>
<li>惩罚热点
<ul>
<li>用户在热门文章上的动作做降权处理，不能代表用户画像</li>
</ul>
</li>
<li>时间衰减
<ul>
<li>一年前喜欢看的文章特征，相对于前几天喜欢的文章特征，以前几天的特征为准作为推送依据</li>
</ul>
</li>
<li>惩罚展现
<ul>
<li>文章推荐给100个人，没人看，文章特征权重就会降低</li>
<li>后续可能重新进行文章画像，也可能打入冷宫</li>
</ul>
</li>
<li>全局背景
<ul>
<li>文章被个别人点赞、转发、评论，但大部分人没看，依然不会被大批量推荐</li>
</ul>
</li>
</ul>
</li>
<li>流式计算框架
<ul>
<li>批量处理
<ul>
<li>一般大数据处理工作，比如这里面说的批量计算用户标签，会选择业务量小的时间点进行批量处理，比如在凌晨，这样可以减少数据处理给业务带来的压力，统一更新用户的标签，但这里存在的一个问题便是无法及时更新用户的标签</li>
</ul>
</li>
<li>流式框架
<ul>
<li>基本做到实时数据处理，基本在用户查看文章动作10分钟后就能对你的标签进行更新，提高用户体验</li>
</ul>
</li>
</ul>
</li>
<li>综合评估
<ul>
<li>不能单单看点击率、留存、收入、互动等单一因素</li>
<li>需要对多个因素，结合其有效期限进行分析
<ul>
<li>比如点击率有效期是比较短的，一篇文章在发布第一天点击率高则系统会疯狂推送，但是第二天可能点击率仍然比较高，但是跟一些热点性的因素相比，或者跟其他人写的新文章这个新鲜因素相比，这个点击率有效性就比较差了，可能就不会再次大批量推送</li>
</ul>
</li>
<li>具体指标的权重应该怎么设置比较好则需要通过不同的实验来判断</li>
</ul>
</li>
<li>A/B Test
<ul>
<li>如果算法在概要阶段就是最好的，就没有测试的概念了</li>
<li>由于算法优劣的不确定性，只有测试才能暴露出来</li>
<li>一个强大的实验平台，可以实现每天数百个实验同时在线，高效管理和分配实验流量，降低实验分析成本，提高算法迭代效率</li>
</ul>
</li>
<li>内容安全机制
<ul>
<li>人工审核</li>
<li>技术识别
<ul>
<li>风险识别技术</li>
<li>鉴黄模型</li>
<li>低俗模型</li>
<li>谩骂模型</li>
<li>泛低质内容识别技术</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>优化广告投放策略</strong></p>
<ul>
<li>程序化广告（俗称精准投放）一般分为三个阶段
<ul>
<li>前期测试阶段
<ul>
<li>检查广告投放准备阶段的各项工作是否已调通</li>
<li>验证广告提案阶段制定的媒体策略是否合理</li>
<li>媒体投放效果是否达到预期</li>
<li>在测试数据的基础上，对不同渠道、媒体、广告位等划分等级，以便更好分配预算</li>
</ul>
</li>
<li>策略优化阶段
<ul>
<li>在前期测试阶段的优化调整基础上，进一步对媒体进行优化，并结合广告提案阶段制定的人群策略和创意策略，不断调优</li>
<li>快速筛选出最优组合（媒体+人群+创意），使广告效果达到平稳变化趋势</li>
</ul>
</li>
<li>稳定放量阶段
<ul>
<li>达到平稳效果后，按照投放预算进行加量投放</li>
<li>在RTB（Real Time Bidding）竞价模式下，流量的量级和价格根据市场竞争的激烈程度会有所不同，执行人员要能够及时发现问题并作出应对策略</li>
</ul>
</li>
</ul>
</li>
<li>优化方法论
<ul>
<li>曝光
<ul>
<li>媒体优化
<ul>
<li>根据媒体人群匹配度、媒体重合度和媒体饱和度做最优媒体组合</li>
<li>媒体匹配度是指媒体中能覆盖到的目标人群的比率</li>
<li>媒体重合度是指多个媒体之间的目标人群重合的比率</li>
<li>媒体饱和度是指该媒体中已投放覆盖到的目标人群占该媒体的总目标人群的比率</li>
</ul>
</li>
<li>创意优化
<ul>
<li>广告匹配度在一定程度上决定着广告投放效果</li>
<li>广告创意贴合广告诉求</li>
</ul>
</li>
<li>频次调整
<ul>
<li>根据不同曝光频次的人群数据找到最优值，设置合理的频次控制</li>
</ul>
</li>
<li>人群调整
<ul>
<li>根据目标受众的投放量级及转化效果，相应增加或减少人群标签的投放</li>
</ul>
</li>
<li>可见曝光优化
<ul>
<li>根据广告可视度的投放数据进行优化，分析不同广告位、地区、时间、浏览器等维度的可视度数据，过滤可见度较低的广告位，将广告位与活动各项设置条件进行调优，形成最佳组合</li>
</ul>
</li>
</ul>
</li>
<li>点击
<ul>
<li>点击率优化
<ul>
<li>细分关联不同定向维度的点击率情况，找出异常点，分析原因，并进行调整优化</li>
</ul>
</li>
<li>点击到达率优化
<ul>
<li>点击到达率的高低取决于网络情况和落地页加载速度</li>
<li>网络异常时会导致用户点击广告后无法正常跳转</li>
<li>Landing Page 页面加载时间太长，有可能导致用户没耐心等待加载完毕就关闭页面，甚至可能统计代码还未被触发，用户就已关闭页面</li>
</ul>
</li>
</ul>
</li>
<li>转化
<ul>
<li>页面内容优化
<ul>
<li>页面内容的编排设计决定着用户的转化意愿</li>
<li>内容要与创意匹配，这是最基本的要求</li>
</ul>
</li>
<li>转化体验优化
<ul>
<li>注册步骤的繁简也很重要</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>算法优化原理
<ul>
<li>活动设置
<ul>
<li>广告活动中设置的预算、频次、投放速度及定向条件等，这是系统出价决策的首要判断条件</li>
</ul>
</li>
<li>特征分析
<ul>
<li>用户维度
<ul>
<li>主要依据用户行为及次数/金额，以及性别、年龄等基础属性</li>
</ul>
</li>
<li>广告位维度
<ul>
<li>主要依据流量的环境，包括页面可视度、页面广告位数量、屏次等</li>
</ul>
</li>
<li>创意维度
<ul>
<li>主要依据内容风格、元件布局、落地页、行业类别等</li>
</ul>
</li>
<li>地域维度
<ul>
<li>主要依据当前用户位置、商圈等</li>
</ul>
</li>
<li>时间维度
<ul>
<li>主要依据具体时间、是否节假日等</li>
</ul>
</li>
</ul>
</li>
<li>历史数据和实时数据
<ul>
<li>特征分析必须基于历史数据和实时数据进行不断学习、优化</li>
<li>数据除了单一维度的用户、创意、广告位外，还需要对它们进行交叉分析，比如某个创意素材效果好，可能仅限于吸引了某一类特征用户</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Brand Advertising vs Performance Advertising</title>
            <link>https://www.marshalgao.com/brand-advertising-vs-performance-advertising/</link>
            <pubDate>Tue, 01 Dec 2020 16:06:01 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/brand-advertising-vs-performance-advertising/</guid>
            <description>流量投放手段
 品牌广告  着重于“抓品牌”，以树立产品品牌形象，提高品牌的市场占有率为直接目的   效果广告  着重于“抓流量”，消耗多少钱，有多少点击量，多少下载量和注册量，都可以监控且用数据来展示出来，只需要为可衡量的结果付费   案例  Adidas全球媒介总监Simon Peel指出阿迪77%的预算在效果，23%在品牌，过度投资了数字和效果渠道，进而牺牲了品牌建设    营销效能最大化思考维度/投放维度
  企业盈利的本质是什么？—— 是消费者的认知转化所带来的销售收入
 社会未来最大成本 -&amp;gt; 顾客的认知成本 品牌立足要从客户自身出发，从顾客心理认知出发，从而建立顾客认知，变成企业的最重要无形资产 纯线上的投放效果是有限的  信息大爆炸，消费者看的多，阈值提高，信息具有短效性 传播变难、触达弱化、人群分散 消费者可以轻易跳过品牌预设的信息，使企业劳心费神铺排的各类广告营销活动变成“打水漂”      广告投放的本质是什么？—— 触达消费者，完成对消费者的认知教育
 无线上或线下之争，关键在于“找到人”的能力，以及传播的效率 Questmobile显示，2020年一季度全国增长的移动端互联网用户数量仅为0.41%，但是投入流量大战的企业和个体数量增长了近八成，线上流量竞争已经白热化 益普索Ipsos发布的《2019年中国国内流行广告语受众调研报告》中数据显示，流行广告语通过主流媒体电梯、互联网及电视等进行传播，更容易被人们记住 对于没有互联网基因的产品，大量投入线上广告意义不大，而正确的做法应该是：精准分析用户数据，合理规划投放策略  例如，天鹅到家采用电梯广告（高频且强制的触达），实现了每投放1元，有0.5元的ROI（Return On Investment） 但0.5元只是短期效果，从中长期来看，将有3倍，也就是1.5元的ROI 两者相加，才能更精准地反映出整个的投放在中长期对销售，对整个品牌建设的拉动      线上和线下的界限是什么？—— 越来越模糊，未来只有数字化与非数字化之分
 以前看报纸，看电视，看到的都是同一个广告，这是“人找广告” 现在打开APP，每个人刷到的广告都是不一样的，会根据每个人的购物兴趣、生活习性、社交习惯等推送不同的广告，这是“广告找人” 数字化大潮下，分众这样的楼宇电梯媒体，也拥有了互联网基因  自今年9月起，分众在智能屏领域已逐步向授权代理商开放DSP系统 帮助代理商实现在线精准选楼和选择时间，以及在线投放和监测，为生活服务类实体终端开启了基于地理位置的在线LBS屏幕广告服务   所谓营销，都是在不同的场景中对消费者种草，然后割草完成转化  在现在电视、互联网等流量都遭遇瓶颈的大环境下，分众是一个可以快速提升到达率的媒体 过去太重视线上的人群，但分众是真正能把人流从线上引到线下，从线下引到线上的媒体，是一个真正的数字化线下媒体 线下流量的开发对于整个营销来说是一个非常好的流量入口，这也是一个非常高效的割草闭环，给品牌提供了高ROI保障      品牌和流量哪个更重要？—— 媒体投资要有长线思维，构建核心品牌资产</description>
            <content type="html"><![CDATA[<p><strong>流量投放手段</strong></p>
<ul>
<li>品牌广告
<ul>
<li>着重于“抓品牌”，以树立产品品牌形象，提高品牌的市场占有率为直接目的</li>
</ul>
</li>
<li>效果广告
<ul>
<li>着重于“抓流量”，消耗多少钱，有多少点击量，多少下载量和注册量，都可以监控且用数据来展示出来，只需要为可衡量的结果付费</li>
</ul>
</li>
<li>案例
<ul>
<li>Adidas全球媒介总监Simon Peel指出阿迪77%的预算在效果，23%在品牌，过度投资了数字和效果渠道，进而牺牲了品牌建设</li>
</ul>
</li>
</ul>
<p><strong>营销效能最大化思考维度/投放维度</strong></p>
<ul>
<li>
<p>企业盈利的本质是什么？—— 是消费者的认知转化所带来的销售收入</p>
<ul>
<li>社会未来最大成本 -&gt; 顾客的认知成本</li>
<li>品牌立足要从客户自身出发，从顾客心理认知出发，从而建立顾客认知，变成企业的最重要无形资产</li>
<li>纯线上的投放效果是有限的
<ul>
<li>信息大爆炸，消费者看的多，阈值提高，信息具有短效性</li>
<li>传播变难、触达弱化、人群分散</li>
<li>消费者可以轻易跳过品牌预设的信息，使企业劳心费神铺排的各类广告营销活动变成“打水漂”</li>
</ul>
</li>
</ul>
</li>
<li>
<p>广告投放的本质是什么？—— 触达消费者，完成对消费者的认知教育</p>
<ul>
<li>无线上或线下之争，关键在于“找到人”的能力，以及传播的效率</li>
<li>Questmobile显示，2020年一季度全国增长的移动端互联网用户数量仅为0.41%，但是投入流量大战的企业和个体数量增长了近八成，线上流量竞争已经白热化</li>
<li>益普索Ipsos发布的《2019年中国国内流行广告语受众调研报告》中数据显示，流行广告语通过主流媒体电梯、互联网及电视等进行传播，更容易被人们记住</li>
<li>对于没有互联网基因的产品，大量投入线上广告意义不大，而正确的做法应该是：精准分析用户数据，合理规划投放策略
<ul>
<li>例如，天鹅到家采用电梯广告（高频且强制的触达），实现了每投放1元，有0.5元的ROI（Return On Investment）</li>
<li>但0.5元只是短期效果，从中长期来看，将有3倍，也就是1.5元的ROI</li>
<li>两者相加，才能更精准地反映出整个的投放在中长期对销售，对整个品牌建设的拉动</li>
</ul>
</li>
</ul>
</li>
<li>
<p>线上和线下的界限是什么？—— 越来越模糊，未来只有数字化与非数字化之分</p>
<ul>
<li>以前看报纸，看电视，看到的都是同一个广告，这是“人找广告”</li>
<li>现在打开APP，每个人刷到的广告都是不一样的，会根据每个人的购物兴趣、生活习性、社交习惯等推送不同的广告，这是“广告找人”</li>
<li>数字化大潮下，分众这样的楼宇电梯媒体，也拥有了互联网基因
<ul>
<li>自今年9月起，分众在智能屏领域已逐步向授权代理商开放DSP系统</li>
<li>帮助代理商实现在线精准选楼和选择时间，以及在线投放和监测，为生活服务类实体终端开启了基于地理位置的在线LBS屏幕广告服务</li>
</ul>
</li>
<li>所谓营销，都是在不同的场景中对消费者种草，然后割草完成转化
<ul>
<li>在现在电视、互联网等流量都遭遇瓶颈的大环境下，分众是一个可以快速提升到达率的媒体</li>
<li>过去太重视线上的人群，但分众是真正能把人流从线上引到线下，从线下引到线上的媒体，是一个真正的数字化线下媒体</li>
<li>线下流量的开发对于整个营销来说是一个非常好的流量入口，这也是一个非常高效的割草闭环，给品牌提供了高ROI保障</li>
</ul>
</li>
</ul>
</li>
<li>
<p>品牌和流量哪个更重要？—— 媒体投资要有长线思维，构建核心品牌资产</p>
<ul>
<li>品牌广告虽然短期内疗效平缓，但却是一种细水长流的方式，而效果广告虽然立竿见影，却缺少长久的韧性</li>
<li>最佳的投放策略，是兼顾从消费者心智到传播效率再到全链路整合的多个维度
<ul>
<li>基于人的数字化以及商品的数字化，消费者的行为路径和浏览痕迹，通过技术手段都可以得到还原</li>
<li>对广告主而言，投放媒体，就是要利用数字化技术，精确圈定人群，并且在投放过程可以实现动态评估与调整优化</li>
<li>分众平台的实力不容小觑</li>
</ul>
</li>
<li>流量不是资产，流量是产生资产的起点
<ul>
<li>品牌、长期购买的用户，才是企业资产，本质上，资产需要是时间积累的</li>
<li>品牌建设，媒体投放，都需要有长期主义，不能仅着眼一个短期的营销活动，更要看中长期的增长</li>
<li>品牌广告、效果广告，都是殊途同归，关键是构建数字资产及心智资产</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>To B Product Landing</title>
            <link>https://www.marshalgao.com/to-b-product-landing/</link>
            <pubDate>Tue, 01 Dec 2020 13:49:22 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/to-b-product-landing/</guid>
            <description>北极星指标
 项目落地之前，找准产品的核心目标 -&amp;gt; 可以为产品指明方向的核心数据指标  滴滴B端 -&amp;gt; 司机接单次数 SaaS -&amp;gt; 使用商家的数量 广告 -&amp;gt; 转化率   毫无意义的例子  装修的老板搞社群运营 即便社群很活跃，但由于社交的高频性，不会有人每个月来找他装修 徒增成本开销    转化全流程
 获取客户 -&amp;gt; 付费转化 -&amp;gt; 客户服务（不同类别的B端产品会有所不同） 以营销类SaaS为例  公司通过组建地推团队开始进行地面覆盖，拉新获客 地面覆盖以后，就是转化，转化商家开始注册、使用公司的SAAS产品 商家使用公司产品的过程中，开始给商家培训，并解答商家在使用产品过程中的各种问题 商家免费使用产品一段时间以后，开始引导商家付费 商家付费以后，给商家提供各种服务支持 商家使用产品的过程中，感觉不错，到了续费期后，商家再次付款购买企业服务    业务模式
 平台型业务  项目的核心业务逻辑是企业帮助连接供需两端需求这样类型的业务，比如美团（连接商家与用户）、淘宝（商家或个人与用户） 获取客户 -&amp;gt; 客户服务 -&amp;gt; 付费转化 以美团为例  获取客户  线上：线索获取、内容传播、广告投放等 线下：地推、大会、分销商、线下活动等   客户服务  通过线上或者电话沟通的方式让商家开始用，并提供运营指导，帮助商家通过平台赚到钱 通过用户下一单返利10元，交易满100返20等激励方式 通过成立美团大学、线下培训等客户成长体系搭建方式，来提高客户的活跃和留存 在客户服务环节的核心目标就是帮助客户成功，让客户在平台上赚到钱   付费转化  提点：平台交易抽成 广告：对流量进行变现，需要销售人员的跟进 第三方买单：销售去拓展愿意买单的第三方       工具型业务  给企业提供可以高效解决企业明确需求产品的业务，比如钉钉（办公）、腾讯云（云计算） 获取客户 -&amp;gt; 客户服务 -&amp;gt; 付费转化 以钉钉为例  获取客户  线上：品牌传播、广告等 线下：大客户销售等   客户服务  通过客服部门帮助客户解决使用工具过程中的各种问题，以及帮助客户更好使用工具，提升客户团队协作的效率问题   付费转化  类型  免费+增值服务，比如：腾讯会议 试用期结束后付费，比如：office   方式  试用期结束后，直接线上转化，通过转化策略产品化的思路进行线上转化 如果线上转化没成功，通过后台数据查看，过了某个时间点，就可以销售跟进直接转化         硬件型业务  企业提供实体硬件的业务，比如大屏幕硬件、自动洗碗机、景区检票闸机 获取客户并付费转化 -&amp;gt; 客户服务  购买妙控键盘，虽然Apple提供14天无理由退换，但这只是它的一项服务，属于客户服务的范畴 但在14天使用期间，用户已经付了钱，对于Apple而言，已经完成了客户获取、付费转化 换言之，购买是一手交钱一手交货的行为，获客和付费同时发生   以景区检票闸机为例  获取客户并付费转化  线上：百度SEO，电商网站售卖等，当在线上获得销售线索以后，接下来由销售跟进，进行客户转化，卖出硬件，获取收入 线下：直销，发展分销商销售、线下活动、参加行业会展等方式获客，并把硬件直接卖给客户，获取收入   客户服务  有的硬件企业会有自己的安装、调试，维护团队进行服务跟进 有的硬件企业会和产业链的其它服务商对接，让其它服务商来进行后期的客户服务       服务型业务  给企业提供的业务当中，需要有人力来完成服务的业务叫服务型业务，比如广告公司提供的广告服务，人力外包公司提供的人力资源服务 两种转化逻辑  获取客户 -&amp;gt; 付费转化 -&amp;gt; 客户服务  人力资源服务 代运营服务   获取客户 -&amp;gt; 客户服务 -&amp;gt; 付费转化  垂直领域营销类SAAS解决方案综合服务商，这些服务商需要先想办法帮客户成功赚到钱以后，再从营业额中分佣     以餐饮营销类SaaS为例  获取客户  线上：活动、品牌推广、SEO等 线下：渠道、分销、BD等   客户服务  提供整体的服务+产品解决方案 培训商家如何使用产品 帮助商家做好用户运营，帮助商家做好用户增长，最终帮助商家实现业务增长   付费转化 （具体商家，具体分析）  软硬件的基础费和服务费 按帮助卖出商品销售额来提点        </description>
            <content type="html"><![CDATA[<p><strong>北极星指标</strong></p>
<ul>
<li>项目落地之前，找准产品的核心目标 -&gt; 可以为产品指明方向的核心数据指标
<ul>
<li>滴滴B端 -&gt; 司机接单次数</li>
<li>SaaS -&gt; 使用商家的数量</li>
<li>广告 -&gt; 转化率</li>
</ul>
</li>
<li>毫无意义的例子
<ul>
<li>装修的老板搞社群运营</li>
<li>即便社群很活跃，但由于社交的高频性，不会有人每个月来找他装修</li>
<li>徒增成本开销</li>
</ul>
</li>
</ul>
<p><strong>转化全流程</strong></p>
<ul>
<li>获取客户 -&gt; 付费转化 -&gt; 客户服务（不同类别的B端产品会有所不同）</li>
<li>以营销类SaaS为例
<ul>
<li>公司通过组建地推团队开始进行地面覆盖，拉新获客</li>
<li>地面覆盖以后，就是转化，转化商家开始注册、使用公司的SAAS产品</li>
<li>商家使用公司产品的过程中，开始给商家培训，并解答商家在使用产品过程中的各种问题</li>
<li>商家免费使用产品一段时间以后，开始引导商家付费</li>
<li>商家付费以后，给商家提供各种服务支持</li>
<li>商家使用产品的过程中，感觉不错，到了续费期后，商家再次付款购买企业服务</li>
</ul>
</li>
</ul>
<p><strong>业务模式</strong></p>
<ul>
<li>平台型业务
<ul>
<li>项目的核心业务逻辑是企业帮助连接供需两端需求这样类型的业务，比如美团（连接商家与用户）、淘宝（商家或个人与用户）</li>
<li>获取客户 -&gt; 客户服务 -&gt; 付费转化</li>
<li>以美团为例
<ul>
<li>获取客户
<ul>
<li>线上：线索获取、内容传播、广告投放等</li>
<li>线下：地推、大会、分销商、线下活动等</li>
</ul>
</li>
<li>客户服务
<ul>
<li>通过线上或者电话沟通的方式让商家开始用，并提供运营指导，帮助商家通过平台赚到钱</li>
<li>通过用户下一单返利10元，交易满100返20等激励方式</li>
<li>通过成立美团大学、线下培训等客户成长体系搭建方式，来提高客户的活跃和留存</li>
<li>在客户服务环节的核心目标就是帮助客户成功，让客户在平台上赚到钱</li>
</ul>
</li>
<li>付费转化
<ul>
<li>提点：平台交易抽成</li>
<li>广告：对流量进行变现，需要销售人员的跟进</li>
<li>第三方买单：销售去拓展愿意买单的第三方</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>工具型业务
<ul>
<li>给企业提供可以高效解决企业明确需求产品的业务，比如钉钉（办公）、腾讯云（云计算）</li>
<li>获取客户 -&gt; 客户服务 -&gt; 付费转化</li>
<li>以钉钉为例
<ul>
<li>获取客户
<ul>
<li>线上：品牌传播、广告等</li>
<li>线下：大客户销售等</li>
</ul>
</li>
<li>客户服务
<ul>
<li>通过客服部门帮助客户解决使用工具过程中的各种问题，以及帮助客户更好使用工具，提升客户团队协作的效率问题</li>
</ul>
</li>
<li>付费转化
<ul>
<li>类型
<ul>
<li>免费+增值服务，比如：腾讯会议</li>
<li>试用期结束后付费，比如：office</li>
</ul>
</li>
<li>方式
<ul>
<li>试用期结束后，直接线上转化，通过转化策略产品化的思路进行线上转化</li>
<li>如果线上转化没成功，通过后台数据查看，过了某个时间点，就可以销售跟进直接转化</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>硬件型业务
<ul>
<li>企业提供实体硬件的业务，比如大屏幕硬件、自动洗碗机、景区检票闸机</li>
<li>获取客户并付费转化 -&gt; 客户服务
<ul>
<li>购买妙控键盘，虽然Apple提供14天无理由退换，但这只是它的一项服务，属于客户服务的范畴</li>
<li>但在14天使用期间，用户已经付了钱，对于Apple而言，已经完成了客户获取、付费转化</li>
<li>换言之，购买是一手交钱一手交货的行为，获客和付费同时发生</li>
</ul>
</li>
<li>以景区检票闸机为例
<ul>
<li>获取客户并付费转化
<ul>
<li>线上：百度SEO，电商网站售卖等，当在线上获得销售线索以后，接下来由销售跟进，进行客户转化，卖出硬件，获取收入</li>
<li>线下：直销，发展分销商销售、线下活动、参加行业会展等方式获客，并把硬件直接卖给客户，获取收入</li>
</ul>
</li>
<li>客户服务
<ul>
<li>有的硬件企业会有自己的安装、调试，维护团队进行服务跟进</li>
<li>有的硬件企业会和产业链的其它服务商对接，让其它服务商来进行后期的客户服务</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>服务型业务
<ul>
<li>给企业提供的业务当中，需要有人力来完成服务的业务叫服务型业务，比如广告公司提供的广告服务，人力外包公司提供的人力资源服务</li>
<li>两种转化逻辑
<ul>
<li>获取客户 -&gt; 付费转化 -&gt; 客户服务
<ul>
<li>人力资源服务</li>
<li>代运营服务</li>
</ul>
</li>
<li>获取客户 -&gt; 客户服务 -&gt; 付费转化
<ul>
<li>垂直领域营销类SAAS解决方案综合服务商，这些服务商需要先想办法帮客户成功赚到钱以后，再从营业额中分佣</li>
</ul>
</li>
</ul>
</li>
<li>以餐饮营销类SaaS为例
<ul>
<li>获取客户
<ul>
<li>线上：活动、品牌推广、SEO等</li>
<li>线下：渠道、分销、BD等</li>
</ul>
</li>
<li>客户服务
<ul>
<li>提供整体的服务+产品解决方案</li>
<li>培训商家如何使用产品</li>
<li>帮助商家做好用户运营，帮助商家做好用户增长，最终帮助商家实现业务增长</li>
</ul>
</li>
<li>付费转化 （具体商家，具体分析）
<ul>
<li>软硬件的基础费和服务费</li>
<li>按帮助卖出商品销售额来提点</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Vector Search</title>
            <link>https://www.marshalgao.com/vector-search/</link>
            <pubDate>Sun, 29 Nov 2020 14:59:59 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/vector-search/</guid>
            <description>获取最相似的节点
计算机只是一个电子设备的集合体，它没法像人一样感知这个世界。怎样使得计算机也能认识这个世界呢？计算机只认识数字，它只能通过数字来量化这个世界，用一组数字来表示一个事物，这样的一组数字就是一个向量（Vector）。如果一个向量由n个数字组成，它就是一个n维向量。拿目前广泛使用的人脸识别技术来说，计算机从照片或视频中提取出人脸的图像，然后将人脸图像转换为128维或者更高维度的向量。
在获取最相似的节点之前，来回顾一下高中的数学知识。在二维平面XY上有若干个点，A(1.0, 2.0)，B(1.0, 0.0)，C(0.0, 2.0)，试问A离谁比较近一些？

根据欧几里得的数学公式\(\sqrt{(x_0 - x_1)^2 + (y_0 - y_1)^2}\)可以计算出AB距离为2, AC距离为1,因此A离C更近一些。这就是一个最简单的向量检索，通过计算获知向量A离C更近，而AC距离更近意味着向量A和向量C更相似。
相应的，对于高维向量，假设用A和B分别代表两个n维向量，它们之间的欧式距离计算公式就变成了\(\sqrt{(A_1 - A_2)^2 + (A_2 - B_2)^2 + ... + (A_n - B_n)^2}\)
回到人脸识别问题，假设我们已有一千万张人脸的向量数据，现在给定一张人脸，怎么在这一千万张人脸中找到与目标人脸最相似的人脸？根据上面的知识，我们只需要把这张人脸的向量和一千万张人脸向量分别计算欧氏距离，距离最小的就是最相似的。
向量检索方法
向量检索有两个基本参数，一个是n，意思是拿n条目标向量去数据库中做检索。另一个是k，意思是查找离目标向量最近的前k个向量，我们一般称为top-k。
向量检索有两类方法 ：存在最近邻检索（Nearest Neighbor Search，NN）和近似最近邻检索（Approximate Nearest Neighbor Search，ANN）。NN最初是用目标向量和数据库向量逐条计算距离，结果最为精确，后来又产生了相关算法（比如KD-tree），使得搜索效率大为提高，但在应对海量高维度数据时显得力不从心。ANN则是在可接受的精度条件下通过把向量分簇建立索引，大幅提高搜索效率，这也是大规模向量检索场景下所使用的主要方法。
分簇索引
打个比方，我们先给一个城市里所有的人按照职业做一个分类，比如工程师，律师，医生，等等。现在我要找一个人，他是Java程序员，那么我们掐指一算，只要在工程师队伍里找就十有八九能找到他，不需要再去其他队伍里找了。

向量检索中典型的做法就是通过某种聚类算法把大批向量分成很多簇， 每个簇含有成百上千条向量，每个簇都有一个中心向量，当用户输入目标向量搜索时，系统先把目标向量和每个簇的中心向量做距离计算，挑选出距离比较近的几个簇，然后再把目标向量和这几个簇里的每一条向量做距离运算，最后得出距离最近的k条结果向量。
下面将以一个散点图来进行更为直观的说明。假设在二维平面上有若干个向量（点）。

通过聚类算法把它们分成若干个簇，簇的数量是可以指定的（这里以4为例），黑圈表示中心向量。

加入要检索的目标向量，根据对比计算，我们发现它离黄色簇的中心最近，那么只需要将目标向量和黄色簇里每一个向量计算距离，就可以得到离目标向量最近的那个向量。

当然，具体到实现环节会有很多种不同做法，有基于矢量量化的，基于图的，以及基于树的各种算法。
面临的问题
大规模向量检索的系统作为一个向量数据库，不但要能够支持海量数据的持久化，还要能快速地检索出用户需要的信息。生产环境中的向量维度一般起步就是128维，高一些的可达512维。我们可以算一下，对于512维度的向量，每条向量有512个数值，通常在计算机里这些数值是以float类型表示，这意味着每条向量将会占用2048字节，那么一亿条这样的向量就会用掉200GB。而生产环境中的向量数量有可能达到十亿甚至百亿的规模。
根据使用的场景，可以分为静态库和增量库。静态库就是数据固定不变的，一旦完成数据导入，基本不会再接收新的数据，这种场景主要注重检索的性能；增量库在用户使用向量检索的过程中可能还伴随着持续的数据插入，需要考虑的问题要多一些，比如数据插入后多久可见，怎样兼顾检索效率和插入效率，如何保证宕机数据不丢失等等。
目前，用于向量检索的最热门工具是Facebook开源的FAISS向量搜索库，另外，微软也开源了一个SPTAG库。用户可以无需深入了解向量聚类和向量相似性计算的算法，就能使用这些库实现简单的向量检索。但是这些只是最基础的工具库，其功能并不包括对向量数据的管理，不具备高可用性，缺乏监控手段，没有提供分布式方案，以及缺少各种语言版本的SDK等等，这也使得用户需要基于它们进行大量的开发才能满足生产环境的要求。</description>
            <content type="html"><![CDATA[<p><strong>获取最相似的节点</strong></p>

<p>计算机只是一个电子设备的集合体，它没法像人一样感知这个世界。怎样使得计算机也能认识这个世界呢？计算机只认识数字，它只能通过数字来量化这个世界，用一组数字来表示一个事物，这样的一组数字就是一个向量（Vector）。如果一个向量由n个数字组成，它就是一个n维向量。拿目前广泛使用的人脸识别技术来说，计算机从照片或视频中提取出人脸的图像，然后将人脸图像转换为128维或者更高维度的向量。</p>

<p>在获取最相似的节点之前，来回顾一下高中的数学知识。在二维平面XY上有若干个点，A(1.0, 2.0)，B(1.0, 0.0)，C(0.0, 2.0)，试问A离谁比较近一些？</p>

<p><center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-e39d87b703c4dcf7f0f214b689fbf1a8_1440w.jpg" alt=""></figure></center></p>

<p>根据欧几里得的数学公式<span  class="math">\(\sqrt{(x_0 - x_1)^2 + (y_0 - y_1)^2}\)</span>可以计算出AB距离为2, AC距离为1,因此A离C更近一些。这就是一个最简单的向量检索，通过计算获知向量A离C更近，而AC距离更近意味着向量A和向量C更相似。</p>

<p>相应的，对于高维向量，假设用A和B分别代表两个n维向量，它们之间的欧式距离计算公式就变成了<span  class="math">\(\sqrt{(A_1 - A_2)^2 + (A_2 - B_2)^2 + ... + (A_n - B_n)^2}\)</span></p>

<p>回到人脸识别问题，假设我们已有一千万张人脸的向量数据，现在给定一张人脸，怎么在这一千万张人脸中找到与目标人脸最相似的人脸？根据上面的知识，我们只需要把这张人脸的向量和一千万张人脸向量分别计算欧氏距离，距离最小的就是最相似的。</p>

<p><strong>向量检索方法</strong></p>

<p>向量检索有两个基本参数，一个是n，意思是拿n条目标向量去数据库中做检索。另一个是k，意思是查找离目标向量最近的前k个向量，我们一般称为top-k。</p>

<p>向量检索有两类方法 ：存在最近邻检索（Nearest Neighbor Search，NN）和近似最近邻检索（Approximate Nearest Neighbor Search，ANN）。NN最初是用目标向量和数据库向量逐条计算距离，结果最为精确，后来又产生了相关算法（比如KD-tree），使得搜索效率大为提高，但在应对海量高维度数据时显得力不从心。ANN则是在可接受的精度条件下通过把向量分簇建立索引，大幅提高搜索效率，这也是大规模向量检索场景下所使用的主要方法。</p>

<p><strong>分簇索引</strong></p>

<p>打个比方，我们先给一个城市里所有的人按照职业做一个分类，比如工程师，律师，医生，等等。现在我要找一个人，他是Java程序员，那么我们掐指一算，只要在工程师队伍里找就十有八九能找到他，不需要再去其他队伍里找了。</p>

<p><center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112903.jpg" alt=""></figure></center></p>

<p>向量检索中典型的做法就是通过某种聚类算法把大批向量分成很多簇， 每个簇含有成百上千条向量，每个簇都有一个中心向量，当用户输入目标向量搜索时，系统先把目标向量和每个簇的中心向量做距离计算，挑选出距离比较近的几个簇，然后再把目标向量和这几个簇里的每一条向量做距离运算，最后得出距离最近的k条结果向量。</p>

<p>下面将以一个散点图来进行更为直观的说明。假设在二维平面上有若干个向量（点）。</p>

<p><center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-0b40121588f693beb5157d5f7caae745_1440w.jpg" alt=""></figure></center></p>

<p>通过聚类算法把它们分成若干个簇，簇的数量是可以指定的（这里以4为例），黑圈表示中心向量。</p>

<p><center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-19ead11e5123e686fcb6611328d1a601_1440w.jpg" alt=""></figure></center></p>

<p>加入要检索的目标向量，根据对比计算，我们发现它离黄色簇的中心最近，那么只需要将目标向量和黄色簇里每一个向量计算距离，就可以得到离目标向量最近的那个向量。</p>

<p><center><figure><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-6cc5bd36aea3f17e69d1da6551bd62c1_1440w.jpg" alt=""></figure></center></p>

<p>当然，具体到实现环节会有很多种不同做法，有基于矢量量化的，基于图的，以及基于树的各种算法。</p>

<p><strong>面临的问题</strong></p>

<p>大规模向量检索的系统作为一个向量数据库，不但要能够支持海量数据的持久化，还要能快速地检索出用户需要的信息。生产环境中的向量维度一般起步就是128维，高一些的可达512维。我们可以算一下，对于512维度的向量，每条向量有512个数值，通常在计算机里这些数值是以float类型表示，这意味着每条向量将会占用2048字节，那么一亿条这样的向量就会用掉200GB。而生产环境中的向量数量有可能达到十亿甚至百亿的规模。</p>

<p>根据使用的场景，可以分为静态库和增量库。静态库就是数据固定不变的，一旦完成数据导入，基本不会再接收新的数据，这种场景主要注重检索的性能；增量库在用户使用向量检索的过程中可能还伴随着持续的数据插入，需要考虑的问题要多一些，比如数据插入后多久可见，怎样兼顾检索效率和插入效率，如何保证宕机数据不丢失等等。</p>

<p>目前，用于向量检索的最热门工具是Facebook开源的FAISS向量搜索库，另外，微软也开源了一个SPTAG库。用户可以无需深入了解向量聚类和向量相似性计算的算法，就能使用这些库实现简单的向量检索。但是这些只是最基础的工具库，其功能并不包括对向量数据的管理，不具备高可用性，缺乏监控手段，没有提供分布式方案，以及缺少各种语言版本的SDK等等，这也使得用户需要基于它们进行大量的开发才能满足生产环境的要求。</p>
]]></content>
        </item>
        
        <item>
            <title>Information Stream Advertising and Electronic Commerce</title>
            <link>https://www.marshalgao.com/information-stream-advertising-and-electronic-commerce/</link>
            <pubDate>Sun, 29 Nov 2020 13:37:47 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/information-stream-advertising-and-electronic-commerce/</guid>
            <description>信息流广告
 信息流  狭义上来说在我们日常使用的APP中，信息按照类似格式上下排列展现给用户的形式都可以称为信息流   信息流广告  将广告放到信息流中，使之与信息流中的信息保持相同的格式 类似于原生广告  原生广告通过“和谐”的内容呈现品牌信息，不破坏用户的体验，为用户提供有价值的信息     发展历史  2006 Facebook 2011 Twitter 2012 新浪微博，之后国内开始盛行   应用场景（取决于产品自身内容展现形式，讲究因地制宜）  搜索类产品  搜索类产品以百度、搜狗等搜索引擎为主，在PC时代就通过在用户搜索的内容中加入广告链接的方式盈利，从而也衍生出了竞价排名等广告机制，进入移动互联网时代，各大手机浏览器中都会嵌入搜索引擎，当用户通过搜索引擎搜索关键词后会在搜索结果中自动匹配若干条相关广告推荐链接   视频类产品  在用户寻找感兴趣的视频时，会在视频信息流中看到夹杂在其中的广告内容   社交类产品  社交类产品以微信朋友圈、新浪微博为主，在用户状态信息流之间加入广告内容，用户可以对广告进行点赞、转发、喜欢等互动行为，从而提升广告品牌曝光度及转化率   新闻资讯类产品  这类产品更为广泛，任何以信息流方式展现内容的产品都可以在不断更新的信息流中加入广告内容       优势  与banner广告、贴片广告、弹窗广告等等相比，信息流广告相对来说是用户体验最好的一种广告形式，因为接近原生广告的形式  三个原生场景  样式原生：即广告的展现形式与产品内容本身展现的形式一致，广告的展现更为自然，不会那么突兀 意图原生：即用户当前的行为与广告之间是有相关性的，如在搜索引擎搜索某关键词，出现的广告与关键词之间是有一定关联的，符合用户意图的 场景原生：即出现的广告内容与用户当前的使用场景具备一定的关联，对用户来说是有正向反馈的         设计原则（并不是简单的内容形式一致就可以）  广告接受度  以内容为相关的广告设计  在信息流中加入的广告内容要与产品信息流中内容相关 对于汽车内容类产品来说，为用户提供汽车优惠，小额借贷类的广告 对于旅游内容类产品来说，为用户提供折扣机票、住宿类的广告   以受众用户为相关的广告设计  在信息流中加入的广告要符合受众用户的需求 目前较为成功的是新闻资讯类产品及社交类产品，根据用户行为习惯通过算法进行个性化推荐，这样的广告可以做到千人千面，让每一个用户发现符合自己诉求有感兴趣的广告是设计的理想目标     广告记忆度  由于效果广告带有营销目的，所以真正可以提升广告记忆度的应该是品牌广告 也许在用户看到广告的那一刻用户并没有相关的需求，但是当用户产生需求后会从记忆中寻常相关信息，这时广告记忆度的作用就体现出来了 如果一个广告给用户的印象深刻，用户就会对产生行为转化 策略  广告的创意设计  创意设计方式很多，如文案设计，新媒体设计 随着技术的发展，信息流广告的展现形式已经不仅仅局限于图片和文字的形式了，而是引入了更多动画、视频等新媒体的展现形式   场景化设计  广告的内容与广告受众场景产生关联，如在618、双11等电商购物节，推送各种优惠信息流广告       广告互动度  在新浪微博、微信朋友圈中常见 优势  用户可以接收到基于个性化推荐的信息流广告 用户对广告的互动行为是对社交链好友可见的，好友间可以看到对方对广告的互动行为，如点赞、喜欢、转发等等，用户间可以通过互动行为使广告产生更多的传播效应       用户体验 VS 商业变现  用户体验维系用户，商业变现要让产品更好的活下去 过多的商业变现会导致用户体验变差，但最好的用户体验是没有商业变现的，产品如何存活又成了新的问题 需要让广告看起来越来越不像广告，把广告变成用户获取信息的一种途径，信息流广告至少现阶段可以满足这些基本的要求    电商中的信息流广告</description>
            <content type="html"><![CDATA[<p><strong>信息流广告</strong></p>
<ul>
<li>信息流
<ul>
<li>狭义上来说在我们日常使用的APP中，信息按照类似格式上下排列展现给用户的形式都可以称为信息流</li>
</ul>
</li>
<li>信息流广告
<ul>
<li>将广告放到信息流中，使之与信息流中的信息保持相同的格式</li>
<li>类似于原生广告
<ul>
<li>原生广告通过“和谐”的内容呈现品牌信息，不破坏用户的体验，为用户提供有价值的信息</li>
</ul>
</li>
</ul>
</li>
<li>发展历史
<ul>
<li>2006 Facebook</li>
<li>2011 Twitter</li>
<li>2012 新浪微博，之后国内开始盛行</li>
</ul>
</li>
<li>应用场景（取决于产品自身内容展现形式，讲究因地制宜）
<ul>
<li>搜索类产品
<ul>
<li>搜索类产品以百度、搜狗等搜索引擎为主，在PC时代就通过在用户搜索的内容中加入广告链接的方式盈利，从而也衍生出了竞价排名等广告机制，进入移动互联网时代，各大手机浏览器中都会嵌入搜索引擎，当用户通过搜索引擎搜索关键词后会在搜索结果中自动匹配若干条相关广告推荐链接</li>
</ul>
</li>
<li>视频类产品
<ul>
<li>在用户寻找感兴趣的视频时，会在视频信息流中看到夹杂在其中的广告内容</li>
</ul>
</li>
<li>社交类产品
<ul>
<li>社交类产品以微信朋友圈、新浪微博为主，在用户状态信息流之间加入广告内容，用户可以对广告进行点赞、转发、喜欢等互动行为，从而提升广告品牌曝光度及转化率</li>
</ul>
</li>
<li>新闻资讯类产品
<ul>
<li>这类产品更为广泛，任何以信息流方式展现内容的产品都可以在不断更新的信息流中加入广告内容</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112901.jpg" alt=""></p>
<ul>
<li>优势
<ul>
<li>与banner广告、贴片广告、弹窗广告等等相比，信息流广告相对来说是用户体验最好的一种广告形式，因为接近原生广告的形式
<ul>
<li>三个原生场景
<ul>
<li>样式原生：即广告的展现形式与产品内容本身展现的形式一致，广告的展现更为自然，不会那么突兀</li>
<li>意图原生：即用户当前的行为与广告之间是有相关性的，如在搜索引擎搜索某关键词，出现的广告与关键词之间是有一定关联的，符合用户意图的</li>
<li>场景原生：即出现的广告内容与用户当前的使用场景具备一定的关联，对用户来说是有正向反馈的</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112902.jpg" alt=""></p>
<ul>
<li>设计原则（并不是简单的内容形式一致就可以）
<ul>
<li>广告接受度
<ul>
<li>以内容为相关的广告设计
<ul>
<li>在信息流中加入的广告内容要与产品信息流中内容相关</li>
<li>对于汽车内容类产品来说，为用户提供汽车优惠，小额借贷类的广告</li>
<li>对于旅游内容类产品来说，为用户提供折扣机票、住宿类的广告</li>
</ul>
</li>
<li>以受众用户为相关的广告设计
<ul>
<li>在信息流中加入的广告要符合受众用户的需求</li>
<li>目前较为成功的是新闻资讯类产品及社交类产品，根据用户行为习惯通过算法进行个性化推荐，这样的广告可以做到千人千面，让每一个用户发现符合自己诉求有感兴趣的广告是设计的理想目标</li>
</ul>
</li>
</ul>
</li>
<li>广告记忆度
<ul>
<li>由于效果广告带有营销目的，所以真正可以提升广告记忆度的应该是品牌广告</li>
<li>也许在用户看到广告的那一刻用户并没有相关的需求，但是当用户产生需求后会从记忆中寻常相关信息，这时广告记忆度的作用就体现出来了</li>
<li>如果一个广告给用户的印象深刻，用户就会对产生行为转化</li>
<li>策略
<ul>
<li>广告的创意设计
<ul>
<li>创意设计方式很多，如文案设计，新媒体设计</li>
<li>随着技术的发展，信息流广告的展现形式已经不仅仅局限于图片和文字的形式了，而是引入了更多动画、视频等新媒体的展现形式</li>
</ul>
</li>
<li>场景化设计
<ul>
<li>广告的内容与广告受众场景产生关联，如在618、双11等电商购物节，推送各种优惠信息流广告</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>广告互动度
<ul>
<li>在新浪微博、微信朋友圈中常见</li>
<li>优势
<ul>
<li>用户可以接收到基于个性化推荐的信息流广告</li>
<li>用户对广告的互动行为是对社交链好友可见的，好友间可以看到对方对广告的互动行为，如点赞、喜欢、转发等等，用户间可以通过互动行为使广告产生更多的传播效应</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>用户体验 VS 商业变现
<ul>
<li>用户体验维系用户，商业变现要让产品更好的活下去</li>
<li>过多的商业变现会导致用户体验变差，但最好的用户体验是没有商业变现的，产品如何存活又成了新的问题</li>
<li>需要让广告看起来越来越不像广告，把广告变成用户获取信息的一种途径，信息流广告至少现阶段可以满足这些基本的要求</li>
</ul>
</li>
</ul>
<p><strong>电商中的信息流广告</strong></p>
<ul>
<li>平台
<ul>
<li>平台面向人群是否符合产品本身的属性</li>
<li>平台流量
<ul>
<li>流量越多，被看到的可能性越大，但成本也就越高</li>
</ul>
</li>
<li>广告形式
<ul>
<li>平台会提供图文、视频等广告形式</li>
</ul>
</li>
</ul>
</li>
<li>广告
<ul>
<li>广告属性与产品自身匹配度
<ul>
<li>婚庆公司的广告用绿色为主题就不合适</li>
</ul>
</li>
<li>banner/详情图设计</li>
<li>广告文案的创意性</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Relationship Among Traffic, Design, Operation and Marketing</title>
            <link>https://www.marshalgao.com/relationship-among-traffic-design-operation-and-marketing/</link>
            <pubDate>Sat, 28 Nov 2020 13:50:45 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/relationship-among-traffic-design-operation-and-marketing/</guid>
            <description>互联网广告可以理解为是一种流量变现的方式，但如何更好的变现呢？这就需要内容的扶持。换言之，好的广告内容决定了品牌的影响力以及文化，而如何利用广告实现用户转化，就需要依靠流量支撑的广告平台（同时也依赖于广告的精准投放）。关于流量以及互联网广告产品的设计的详细说明已经在前面的文章中分享过了，所以本文将重点关注互联网运营、营销，以及在流量时代下，如何树立品牌价值。
互联网运营与市场营销
  定义
 市场营销（关键词：创造、沟通、传播、交换，顾客、客户、合作伙伴、社会、价值）  市场营销是在创造、沟通、传播和交换产品中，为顾客、客户、合作伙伴以及整个社会带来价值的一系列活动、过程和体系   互联网运营（关键词：用户，粘性，贡献，忠诚度，活动，参与度，数据，产品改进，用户感觉）  对用户群体进行有目的的组织和管理，增加用户粘性、用户贡献和用户忠诚度，有针对性地开展用户活动，增加用户积极性和参与度，并配合市场运营需要进行活动方案策划 能对产品和市场数据进行分析，并以此为依据推进产品改进，并且始终保持敏锐的用户感觉   从定义可以看出，市场营销的界定范围远大于互联网运营  比如，创造的工作现已经交给产品经理完成 一个市场营销工作，其实是由项目经理、产品经理和运营以及其他人员共同完成      以在线教育网课为例
 场景（整个过程是市场营销）  当老板发现了一个用户新需求后，会安排教研和老师录制课程，这里的教研和老师其实就是产品经理和研发 当课程录完后，就交付给运营团队进行上架、发布、传播和售卖，以及口碑维护   将场景套入市场营销的定义（明显看出互联网运营只是市场营销的一部分）  教研和老师创造课程，销售和电商负责沟通，运营则负责传播，客户进行了付费，本质上产品的交换 客户通过课程解决了知识盲点，并考试通过，获得了价值 老板从利润中扣出部分上缴国库，则为社会创造了价值   产品为发布之前，运营已经在各渠道开始预热  新媒体运营团队  可能需要发布文章，开始撩动用户情绪和痛点：为什么要上这门课？上了这门课的好处在哪？现在用的比较多的套路就是：为什么别人上了这门课就比你优秀之类的   APP运营团队  可能需要梳理启动页、首屏、banner、Push的排期和优先级，其中还涉及到文案制作，以及和工程师的沟通   渠道运营团队  可能需要联系外部互推资源，可能是Live的植入，公众号推文的次条等等，让新产品上线达到最佳效果   用户运营团队  可能需要开始准备发朋友圈九宫格的图片和话术，配合新媒体团队在各大社群里，投放新产品的软件链接，并且用虚拟观众席带节奏，让用户传播   电商运营团队  可能需要整理文案、图片等等，把新产品上架，并制作客服回复话术，等课程正式录完成然后发布         “大运营”概念</description>
            <content type="html"><![CDATA[<p>互联网广告可以理解为是一种流量变现的方式，但如何更好的变现呢？这就需要内容的扶持。换言之，好的广告内容决定了品牌的影响力以及文化，而如何利用广告实现用户转化，就需要依靠流量支撑的广告平台（同时也依赖于广告的精准投放）。关于流量以及互联网广告产品的设计的详细说明已经在前面的文章中分享过了，所以本文将重点关注互联网运营、营销，以及在流量时代下，如何树立品牌价值。</p>
<p><strong>互联网运营与市场营销</strong></p>
<ul>
<li>
<p>定义</p>
<ul>
<li>市场营销（关键词：创造、沟通、传播、交换，顾客、客户、合作伙伴、社会、价值）
<ul>
<li>市场营销是在创造、沟通、传播和交换产品中，为顾客、客户、合作伙伴以及整个社会带来价值的一系列活动、过程和体系</li>
</ul>
</li>
<li>互联网运营（关键词：用户，粘性，贡献，忠诚度，活动，参与度，数据，产品改进，用户感觉）
<ul>
<li>对用户群体进行有目的的组织和管理，增加用户粘性、用户贡献和用户忠诚度，有针对性地开展用户活动，增加用户积极性和参与度，并配合市场运营需要进行活动方案策划</li>
<li>能对产品和市场数据进行分析，并以此为依据推进产品改进，并且始终保持敏锐的用户感觉</li>
</ul>
</li>
<li>从定义可以看出，市场营销的界定范围远大于互联网运营
<ul>
<li>比如，创造的工作现已经交给产品经理完成</li>
<li>一个市场营销工作，其实是由项目经理、产品经理和运营以及其他人员共同完成</li>
</ul>
</li>
</ul>
</li>
<li>
<p>以在线教育网课为例</p>
<ul>
<li>场景（整个过程是市场营销）
<ul>
<li>当老板发现了一个用户新需求后，会安排教研和老师录制课程，这里的教研和老师其实就是产品经理和研发</li>
<li>当课程录完后，就交付给运营团队进行上架、发布、传播和售卖，以及口碑维护</li>
</ul>
</li>
<li>将场景套入市场营销的定义（明显看出互联网运营只是市场营销的一部分）
<ul>
<li>教研和老师创造课程，销售和电商负责沟通，运营则负责传播，客户进行了付费，本质上产品的交换</li>
<li>客户通过课程解决了知识盲点，并考试通过，获得了价值</li>
<li>老板从利润中扣出部分上缴国库，则为社会创造了价值</li>
</ul>
</li>
<li>产品为发布之前，运营已经在各渠道开始预热
<ul>
<li>新媒体运营团队
<ul>
<li>可能需要发布文章，开始撩动用户情绪和痛点：为什么要上这门课？上了这门课的好处在哪？现在用的比较多的套路就是：为什么别人上了这门课就比你优秀之类的</li>
</ul>
</li>
<li>APP运营团队
<ul>
<li>可能需要梳理启动页、首屏、banner、Push的排期和优先级，其中还涉及到文案制作，以及和工程师的沟通</li>
</ul>
</li>
<li>渠道运营团队
<ul>
<li>可能需要联系外部互推资源，可能是Live的植入，公众号推文的次条等等，让新产品上线达到最佳效果</li>
</ul>
</li>
<li>用户运营团队
<ul>
<li>可能需要开始准备发朋友圈九宫格的图片和话术，配合新媒体团队在各大社群里，投放新产品的软件链接，并且用虚拟观众席带节奏，让用户传播</li>
</ul>
</li>
<li>电商运营团队
<ul>
<li>可能需要整理文案、图片等等，把新产品上架，并制作客服回复话术，等课程正式录完成然后发布
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/v2-6b3d35df41ce7dcd142dd0fd1757413d_1440w.jpg" alt=""></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>“大运营”概念</p>
<ul>
<li>以用户为核心，驱动整个企业的战略资源调配的科学战略模型</li>
<li>包括设计一整套以“大运营”驱动的组织架构，人员招聘标准，KPI考核、激励等等</li>
<li>以用户为中心，以运营驱动一切企业资源，包括产品、服务、品牌传播等等</li>
</ul>
</li>
</ul>
<p><strong>流量时代下的品牌价值</strong></p>
<ul>
<li>现存的问题
<ul>
<li>品牌是有钱、有时间才会考虑的非刚需</li>
<li>品牌被认为是营销中的高配</li>
<li>媒体、自媒体开始鼓吹“流量为王”</li>
<li>专家抛出“品牌无用论”</li>
</ul>
</li>
<li>品牌定义
<ul>
<li>品牌代表一种形象</li>
<li>brand（品牌识别）-&gt; Brand（品牌内涵）</li>
<li>以产品为中心 -&gt; 以消费者为中心</li>
<li>品牌从早起的logo，逐渐演化成消费者内心的烙印</li>
<li>品牌是一个企业最终要实现的结果</li>
</ul>
</li>
<li>打造品牌
<ul>
<li>branding（verb）
<ul>
<li>打造品牌是影响消费者对产品、服务、企业认知的艺术和科学</li>
</ul>
</li>
<li>销售、公关、广告与品牌的区别
<ul>
<li>男生说：我是一个好男人，考虑我吧-【销售】</li>
<li>男生说：我是好男人呢，我是好男人，我是好男人-【广告】</li>
<li>闺蜜说：这男的是个好男人-【公关】</li>
<li>女生说：我知道，你是个好男人-【品牌】
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/Zy3o62QZygScUWj4QXe6.png" alt=""></li>
</ul>
</li>
<li>销售、广告和公关都是推力，品牌是拉力，打造品牌就是促使消费者主动选择</li>
<li>但每个消费者可以记住并产生共鸣的品牌数量有限，所以每个品牌在“抢占”用户心智
<ul>
<li>在营销中常常用thought leadership（心智领导力，类似的词有mind share等）来量化消费者心目中品牌占比</li>
<li>比例越高，考虑购买的可能性越大</li>
</ul>
</li>
<li>打造品牌是抢占消费者心目中认知的策略
<ul>
<li>从品牌定位、识别、内容传播、客户体验、沟通反馈等角度不断深入
<ul>
<li>目标客户是谁，需求是什么？独特之处在哪？带给客户的价值有哪些？</li>
<li>制定品牌VI、规范包装、logo、颜色、图片，甚至还包括声音、味道等（比如英特尔的等等等，星巴克的独特咖啡味）</li>
<li>内容传播，包含广告、自媒体、口碑等渠道，在硬广告铺天盖地并让人反感的阶段，用心制作有温度的文字、视频更能让人记得住，想得起来</li>
<li>数字化精准运营，根据客户消费、行为等数据，与客户时常保持沟通与联系，推送客户有兴趣的信息等</li>
<li>规范内部员工与客户沟通交流的规范与准则，珍惜每一次与消费者沟通的机会</li>
</ul>
</li>
</ul>
</li>
<li>仅仅通过洗脑广告、KOL代言，做不到与品牌的强关联
<ul>
<li>短期营效尚可，但长期力不从心</li>
<li>品牌的打造需要根据企业所处的阶段、行业特性、目标人群等各不相同，没有标准答案</li>
<li>让消费者由表及里，由浅入深的认识到认同，并且最终产生共鸣是打造品牌的底层逻辑</li>
</ul>
</li>
<li>一味降价与打折只会损害品牌
<ul>
<li>多品类企业可以优化产品组成，削减收益不好的品类，重点打造优势品牌</li>
</ul>
</li>
</ul>
</li>
<li>品牌价值
<ul>
<li>两种模型
<ul>
<li>大卫·艾克品牌模型
<ul>
<li>从认识-认知-认可-认同，也是从消费者从路人成为忠粉的过程</li>
</ul>
</li>
<li>凯文·凯勒CBBE品牌价值模型
<ul>
<li>先记住品牌名字、logo、代言人</li>
<li>然后了解品牌产品的特点，跟其他同类产品及服务有什么不同</li>
<li>逐渐有了认可与信任，最后与品牌之间产生情感共鸣
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/BhzCd0HATrzJcmi8chk7.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>品牌是企业与消费者签订的无形契约（企业承诺品质、服务、价格，消费者承诺持续购买）
<ul>
<li>对消费者
<ul>
<li>两者的约定可以简化购买决策的时间与风险</li>
<li>某些品牌还能提供身份认同和地位标签，带来情感和精神上的认同与满足</li>
</ul>
</li>
<li>对企业
<ul>
<li>有效区分、信用背书、带来溢价</li>
<li>强势品牌还会带来对竞争对手的营销行为有更高的抵抗力，对危机有更高的包容度，营销传播更加高效，吸引更多伙伴合作，员工招募与留任更加容易，更大的金融市场回报</li>
</ul>
</li>
</ul>
</li>
<li>品牌是一种资产，那么打造品牌就是长期投资的过程（不仅仅需要投入资金，还需要时间、耐心与专心）</li>
<li>品牌价值就是企业的未来，强势品牌会持续带来高回报</li>
</ul>
</li>
<li>接触点的品牌打造
<ul>
<li>在消费者体验中的各个接触点都让品牌给其留下印象
<ul>
<li>购买前、购买时、购买后阶段是的各种互动，也是从认识-认知-认可-认同的不断深入
<ul>
<li>购买前（所看、所想）：通过广告、朋友或KOL推荐、搜索、网站、文章等形式主动或被动的了解信息——这个阶段是从不认识到认识以及有认知</li>
<li>购买时（所买）：产品UI、零售陈列、现场体验或试用、销售人员沟通等——这个过程可以理解成消费者的认可过程</li>
<li>购买后（所用）：会员关怀、售后服务、社群沟通等，如果消费者产生了认同或者说共鸣，很容易推荐给别人并产生复购以及长期的忠诚</li>
</ul>
</li>
<li>用户和品牌关系中，产品虽说非常重要，但仅仅是一个环节
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/q1mDND3vKa3WNKU91N9N.png" alt=""></li>
</ul>
</li>
<li>爆品的打造
<ul>
<li>适用创新的产品吸引用户的关注和购买</li>
<li>会让消费者越过认知的过程，直接变成忠实用户</li>
<li>但长期忠诚需要持续品质如一的产品、创新以及完善的服务</li>
</ul>
</li>
<li>品牌远比产品的含义广泛，增加了情感因素，更富有内涵，对企业的价值更大</li>
<li>流量是购买前吸引认识的一个阶段，有了流量不一定有销售，更不一定会有品牌
<ul>
<li>“私域流量”仅仅是把特定客户群留下来，如果没有持续的沟通互动，一样不能实现品牌带来的价值</li>
</ul>
</li>
<li>品牌的打造需要漫长的时间，但是毁掉一个品牌却非常快，一次安全事件，创始人丑闻都可能将品牌置于死地（品牌破坏后重建需要从头再来）</li>
<li>外界的客户沟通之外，员工也是品牌传播大使
<ul>
<li>人人都是自媒体的时代，员工包括在职离职的都为公司说好话，自然说明这是一家伟大公司，值得客户信赖</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Mobile Game and Internet Advertising</title>
            <link>https://www.marshalgao.com/mobile-game-and-internet-advertising/</link>
            <pubDate>Fri, 27 Nov 2020 13:41:32 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/mobile-game-and-internet-advertising/</guid>
            <description>手游买量规模持续攀升，但榜单头部出现了“异样”
 以前将手游买量用到极致的往往是一些小公司的游戏 近期，头部领域的游戏也开始出现在买量排行榜前列 以3款主流产品投放为例   三国志·战略篇
 策略  从买量规模来看，一直保持大规模投放 远高于同类题材投放均值（三国）和同玩法投放均值（策略）   内容  高晓松为游戏代言人（这种方式更受大厂的青睐）      魔法门之英雄无敌：王朝
  策略
 上线之后大规模投放，10天迎来高峰 随后开始放缓，平均保持每天200组以上投放    内容
 将重点放在了IP、文案、图片 重点强调“育碧”、“魔法门”等关键词      不休的乌拉拉
 策略  上线之后大规模投放，一周迎来高峰 随后开始放缓   内容  重点在游戏特色内容上，以“霸王龙”、“独角猩”等来吸引受众 创造了当下热门的真人剧形式的素材，但成本较高        主流游戏VS买量游戏：打法出现差异，“不换皮”是最大的差别
 过去“买量”实际上是一种更偏“流量”的打法 能够在一定的数据模型下，通过买量叠高营收的产品无非就是那么几类，多家发行商选择一款品质还不错的产品，再以换皮“复制”出多款看似不同实则一样的游戏，搭配精准买量，在市场上能够洗出更多的用户  尽管“换皮”可以冲高游戏的总盘子，但是单款产品的生命周期和用户生态则相对薄弱 “换皮”往往需要铤而走险，要面对版号、应用商店等拷问   买量市场的“正规军”则选择了相反的方向，“不换皮”是其与买量游戏的最大区别  “不换皮”也意味着这些产品的买量并不遵循“一波流” 这些“主流产品”在买量上并非看重短期的营收，而更多的是通过买量让产品获得更多曝光和用户 高投入、多平台投放、扛成本能力强，再加上这些产品本身的游戏质量相对较好，因此也会有更好的长线营收表现   随着游戏市场大环境的收紧和版号的严控，这种以“产品”为根本的买量打法，长远来看对游戏公司的发展也是一种更健康的选择  竞争升级，“正规军”入场，未来手游买量或许更困难</description>
            <content type="html"><![CDATA[<p><strong>手游买量规模持续攀升，但榜单头部出现了“异样”</strong></p>
<ul>
<li>以前将手游买量用到极致的往往是一些小公司的游戏</li>
<li>近期，头部领域的游戏也开始出现在买量排行榜前列</li>
<li>以3款主流产品投放为例
<ul>
<li>
<p>三国志·战略篇</p>
<ul>
<li>策略
<ul>
<li>从买量规模来看，一直保持大规模投放</li>
<li>远高于同类题材投放均值（三国）和同玩法投放均值（策略）</li>
</ul>
</li>
<li>内容
<ul>
<li>高晓松为游戏代言人（这种方式更受大厂的青睐）</li>
</ul>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112701.png" alt=""></p>
</li>
<li>
<p>魔法门之英雄无敌：王朝</p>
<ul>
<li>
<p>策略</p>
<ul>
<li>上线之后大规模投放，10天迎来高峰</li>
<li>随后开始放缓，平均保持每天200组以上投放</li>
</ul>
</li>
<li>
<p>内容</p>
<ul>
<li>将重点放在了IP、文案、图片</li>
<li>重点强调“育碧”、“魔法门”等关键词</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112702.png" alt=""></p>
</li>
</ul>
</li>
<li>
<p>不休的乌拉拉</p>
<ul>
<li>策略
<ul>
<li>上线之后大规模投放，一周迎来高峰</li>
<li>随后开始放缓</li>
</ul>
</li>
<li>内容
<ul>
<li>重点在游戏特色内容上，以“霸王龙”、“独角猩”等来吸引受众</li>
<li>创造了当下热门的真人剧形式的素材，但成本较高</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>主流游戏VS买量游戏：打法出现差异，“不换皮”是最大的差别</strong></p>
<ul>
<li>过去“买量”实际上是一种更偏“流量”的打法</li>
<li>能够在一定的数据模型下，通过买量叠高营收的产品无非就是那么几类，多家发行商选择一款品质还不错的产品，再以换皮“复制”出多款看似不同实则一样的游戏，搭配精准买量，在市场上能够洗出更多的用户
<ul>
<li>尽管“换皮”可以冲高游戏的总盘子，但是单款产品的生命周期和用户生态则相对薄弱</li>
<li>“换皮”往往需要铤而走险，要面对版号、应用商店等拷问</li>
</ul>
</li>
<li>买量市场的“正规军”则选择了相反的方向，“不换皮”是其与买量游戏的最大区别
<ul>
<li>“不换皮”也意味着这些产品的买量并不遵循“一波流”</li>
<li>这些“主流产品”在买量上并非看重短期的营收，而更多的是通过买量让产品获得更多曝光和用户</li>
<li>高投入、多平台投放、扛成本能力强，再加上这些产品本身的游戏质量相对较好，因此也会有更好的长线营收表现</li>
</ul>
</li>
<li>随着游戏市场大环境的收紧和版号的严控，这种以“产品”为根本的买量打法，长远来看对游戏公司的发展也是一种更健康的选择</li>
</ul>
<p><strong>竞争升级，“正规军”入场，未来手游买量或许更困难</strong></p>
<ul>
<li>买量市场不断正规化，换皮、刷量的方式不再适用</li>
<li>大厂产品本身就属于“精品”，游戏高品质背书，并且往往带有大IP，吸量优势明显
<ul>
<li>其他中小厂商、以“换皮”玩法为主的买量厂商，势必要付出更多的成本与其抗衡</li>
</ul>
</li>
<li>大厂的买量投入力度更强，相应地也拉高了买量门槛
<ul>
<li>买量市场是一个不断变化和波动的市场，每个阶段的价格都与供求关系、竞价机制产生联系，往往大厂在某个时间段进行大手笔的投放，就会影响到相应品类游戏、相应平台的短期价格和流量走向</li>
</ul>
</li>
<li>在广告素材制作、创意输出上，大厂也在逐渐与其他中小厂商拉开差距
<ul>
<li>当下流行的真人剧形式、明星代言人，无一不是大厂的玩法，这对于中小买量厂商来说更加难以跨越</li>
</ul>
</li>
<li>尽管竞价公平，但大厂仍然在公司实力、资金、素材创作、创意能力、输出能力等方面有着很强的综合竞争力</li>
</ul>
<p><strong>原文链接</strong></p>
<ul>
<li><a href="https://mp.weixin.qq.com/s/yxEUa7oApL2m9-qCkyeJlQ">手游“正规军”正大举进入买量市场？</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>How the Ocean Engine Drives the Transition of Commercial Products</title>
            <link>https://www.marshalgao.com/how-the-ocean-engine-drives-the-transition-of-commercial-products/</link>
            <pubDate>Thu, 26 Nov 2020 14:00:25 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/how-the-ocean-engine-drives-the-transition-of-commercial-products/</guid>
            <description>什么是巨量引擎
巨量引擎是2019年字节跳动发布的一商业化营销服务品牌。在引擎大会2020现场，巨量引擎产品高级副总裁刘思齐表示：技术已经成为所有重要课题的底色，营销的“技术+”时代已经到来；基于“技术+”的主干，巨量引擎分享了对于产品、创意、内容、度量、转化等最新的思考。这些能力又将给行业带来哪些影响？在这些维度上，巨量引擎又将为行业带来哪些新的增长路径？
巨量引擎的三阶跳
 内核搭建  内核搭建阶段指的是巨量引擎商业产品体系最初的3、4年时间 在这个阶段，字节跳动从0开始，基于字节跳动的推荐算法内核，完整地搭建出了一套贯穿从客户到用户的商业信息分发全过程，以及客户在整个推广周期内全交易流程的商业产品体系 它包含了整个巨量引擎商业产品围绕用户体验、交互效率、转化能力，再到人群识别、排序推荐的各个业务流程，还在其中建设了客户效率、素材创意、线索流转、效果度量等数百个模块   流量发展  字节跳动从今日头条再到抖音，成功复刻了自己快速增长的方法论，收割了几个亿级用户量的产品 牢牢把持住了用户的注意力，也成功抢占住了优势流量高地 至此，巨量引擎有了产品基础和流量实力   产品跃迁  营销语境下的内容生态  内容即营销 品牌要想要做好营销，实际上是需要探索如何去做好内容与营销的深度整合 对平台而言，也需要从商业内容的生产和分发两条线同时出发，共同完成营销目的  内容生产  做达人内容的星图平台负责承接专业的营销内容生产 全民任务这样的平台来聚合更分散的UGC内容生产——实现了生产的梳理整合   营销内容分发  字节跳动整个产品体系提供了自然流量、广告，以及Dou+等不同的渠道，给品牌不同性质、类型的内容更多的分发渠道选择   营销目的  基于内容的直接转化  无论是通过购物车直接形成购买交易的转化，还是通过转化组件实现下载跳转，又或是通过POI等为用户实现最终的到店，都是在服务商家的直接转化目的   商家提升品牌认知  譬如说通过品牌号来做内容聚合，通过品牌主页做互动，通过挑战赛来引导有品牌标识、品牌信息的UGC生产及传播，核心都是为了抢占用户心智         商业产品打造，从创意到分发，再到价值评估的工具手段   广告创新（产品创新）
 重点聚焦探索体验与价值的统一  巨量引擎目前已打造出Topview等好看的产品、试玩广告等好玩的产品、本地广告等好用的产品，完美的兼顾了用户体验与商业价值 用户体验带来用户价值，用户价值带来商业价值，用户对广告不那么反感了，自然更愿意接受企业的信息   服务创意生产者  巨量创意——巨量引擎旗下的视频创意生产全链条产品。它是巨量引擎官方指定的营销创意交流服务平台，通过展示、剖析大量的优秀广告创意来帮助字节系代理、达人、制作公司等快速提升广告制作技巧 帮助制作公司解决找创意、做创意、找作者等几重问题，整体上从创意和生产上优化创意内容的供给      创意生产及分发（获取流量）</description>
            <content type="html"><![CDATA[<p><strong>什么是巨量引擎</strong></p>
<p>巨量引擎是2019年字节跳动发布的一商业化营销服务品牌。在引擎大会2020现场，巨量引擎产品高级副总裁刘思齐表示：技术已经成为所有重要课题的底色，营销的“技术+”时代已经到来；基于“技术+”的主干，巨量引擎分享了对于产品、创意、内容、度量、转化等最新的思考。这些能力又将给行业带来哪些影响？在这些维度上，巨量引擎又将为行业带来哪些新的增长路径？</p>
<p><strong>巨量引擎的三阶跳</strong></p>
<ul>
<li>内核搭建
<ul>
<li>内核搭建阶段指的是巨量引擎商业产品体系最初的3、4年时间</li>
<li>在这个阶段，字节跳动从0开始，基于字节跳动的推荐算法内核，完整地搭建出了一套贯穿从客户到用户的商业信息分发全过程，以及客户在整个推广周期内全交易流程的商业产品体系</li>
<li>它包含了整个巨量引擎商业产品围绕用户体验、交互效率、转化能力，再到人群识别、排序推荐的各个业务流程，还在其中建设了客户效率、素材创意、线索流转、效果度量等数百个模块</li>
</ul>
</li>
<li>流量发展
<ul>
<li>字节跳动从今日头条再到抖音，成功复刻了自己快速增长的方法论，收割了几个亿级用户量的产品</li>
<li>牢牢把持住了用户的注意力，也成功抢占住了优势流量高地</li>
<li>至此，巨量引擎有了产品基础和流量实力</li>
</ul>
</li>
<li>产品跃迁
<ul>
<li>营销语境下的内容生态
<ul>
<li>内容即营销</li>
<li>品牌要想要做好营销，实际上是需要探索如何去做好内容与营销的深度整合</li>
<li>对平台而言，也需要从商业内容的生产和分发两条线同时出发，共同完成营销目的
<ul>
<li>内容生产
<ul>
<li>做达人内容的星图平台负责承接专业的营销内容生产</li>
<li>全民任务这样的平台来聚合更分散的UGC内容生产——实现了生产的梳理整合</li>
</ul>
</li>
<li>营销内容分发
<ul>
<li>字节跳动整个产品体系提供了自然流量、广告，以及Dou+等不同的渠道，给品牌不同性质、类型的内容更多的分发渠道选择</li>
</ul>
</li>
<li>营销目的
<ul>
<li>基于内容的直接转化
<ul>
<li>无论是通过购物车直接形成购买交易的转化，还是通过转化组件实现下载跳转，又或是通过POI等为用户实现最终的到店，都是在服务商家的直接转化目的</li>
</ul>
</li>
<li>商家提升品牌认知
<ul>
<li>譬如说通过品牌号来做内容聚合，通过品牌主页做互动，通过挑战赛来引导有品牌标识、品牌信息的UGC生产及传播，核心都是为了抢占用户心智</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>商业产品打造，从创意到分发，再到价值评估的工具手段
<ul>
<li>
<p>广告创新（产品创新）</p>
<ul>
<li>重点聚焦探索体验与价值的统一
<ul>
<li>巨量引擎目前已打造出Topview等好看的产品、试玩广告等好玩的产品、本地广告等好用的产品，完美的兼顾了用户体验与商业价值</li>
<li>用户体验带来用户价值，用户价值带来商业价值，用户对广告不那么反感了，自然更愿意接受企业的信息</li>
</ul>
</li>
<li>服务创意生产者
<ul>
<li>巨量创意——巨量引擎旗下的视频创意生产全链条产品。它是巨量引擎官方指定的营销创意交流服务平台，通过展示、剖析大量的优秀广告创意来帮助字节系代理、达人、制作公司等快速提升广告制作技巧</li>
<li>帮助制作公司解决找创意、做创意、找作者等几重问题，整体上从创意和生产上优化创意内容的供给</li>
</ul>
</li>
</ul>
</li>
<li>
<p>创意生产及分发（获取流量）</p>
<ul>
<li>搭建穿山甲平台
<ul>
<li>有效推进了行业商业化模式的进阶，巨量引擎给穿山甲的定义，是一个把内部的增长与变现能力对外开放的平台。简而言之，就是将巨量引擎在算法推荐上溢出的能力，开放给合作伙伴，让合作伙伴也能通过更高效的算法推荐而在流量上获得增量——这和简单地把零散流量打包起来做个网盟，并不是一个概念</li>
</ul>
</li>
</ul>
</li>
<li>
<p>最终的效果及价值评估工具（价值评估）</p>
<ul>
<li>转化
<ul>
<li>体验和价值的统一</li>
<li>TAC 模型
<ul>
<li>T 代表全链条的跟踪能力</li>
<li>A 代表从传统的渠道包归因到点击归因，甚至播放归因的能力，而从更科学的评估媒体、用户价值</li>
<li>C 则代表全链条的转化优化能力</li>
<li>从oCPM到Deep oCPM的迭代升级尤为突出
<ul>
<li>它可以提供诸如实现游戏激活且付费、电商有效下单、O2O有效线索等深度转化指标的转化评估维度，真正做到了全链条覆盖，是更优的转化模型，也为客户提供了更准确的投放预测参考</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112601.jpg" alt=""></p>
<ul>
<li>度量
<ul>
<li>一个常见的误区是将度量等同于监测</li>
<li>实际上，度量需要一整套的营销价值评估体系，要能够为品牌输出分析结论，驱动品牌进行投放优化，而不仅仅是终止于事后的数据监测结果而已</li>
<li>解决方案——云图
<ul>
<li>以“现代营销学之父”菲利普·科特勒的5A理论为基础，搭建出的一套以O-5A-GROW为方法论指导的投放评估体系
<ul>
<li>科特勒认为企业需要让消费者更多地参与到营销价值的创造中来，因此以5A——Aware（感知）、Appeal（好奇）、Ask（询问）、Act（行动）、Advocate（拥护）定义了消费者所处在的阶段</li>
<li>O-5A-GROW中，O为Opportunity，即是为品牌拓展可能转化为5A人群的机会消费群体，而GROW则是从Gain（品牌知名度）、Relation deepening（深度种草）、Owned self-media（众媒养成）和Word of mouth（口碑建设）的角度来科学评估营销活动，最终指导营销的下一步优化</li>
</ul>
</li>
<li>将“度量”的能力直接交到客户手中，让客户从被动接受营销结果，到能够主动分析问题、提出优化方案，最终服务的也是产品以及行业整体效率提升的大目标方向</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112602.jpg" alt=""></p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>未来增长路径</strong></p>
<ul>
<li>影响增益
<ul>
<li>流量
<ul>
<li>量大</li>
<li>转化率高</li>
</ul>
</li>
<li>内容
<ul>
<li>形成了全面覆盖OGC、PGC和UGC的内容营销矩阵</li>
<li>能充分满足各类品牌主，去表达产品内涵和主张的需求</li>
</ul>
</li>
<li>生态
<ul>
<li>明星达人生态带来的增益</li>
<li>合作方式更灵活，也能支持多种营销目标</li>
</ul>
</li>
</ul>
</li>
<li>品效协同
<ul>
<li>强调深入到不同行业，通过产品化的方式，内容整合的方式去做到品效共赢</li>
<li>为不同品类、不同行业的品牌都能提供符合品牌诉求的营销价值，打造营销的完整闭环</li>
</ul>
</li>
<li>全域整合
<ul>
<li>巨量引擎整合本地资源、内容生态、传播矩阵以及线下落地等</li>
<li>形成了一套有影响力、可规模化的解决方案</li>
</ul>
</li>
<li>阵地经营
<ul>
<li>实现从品牌展示到关系沉淀的闭环</li>
<li>从内容创造，到流量获取，再到营销转化、长效经营，最后数据沉淀后，基于“度量”的结果为整个营销链条再提供新的优化指导方案的整个历程</li>
<li>在这整个品牌营销的各个环节与阵地上，都已经有了巨量引擎所提供的工具与多种能力支持，最终帮助品牌达成品牌价值、用户价值、转化价值以及内容价值的多项实现，形成长期经营的效果</li>
</ul>
</li>
<li>在历经了三个阶段、六个维度的发展后，巨量引擎为客户所提供的四个增长路径已经愈发明确，已经在快速推陈出新、不断优化迭代的过程中，带动自有产品——乃至于整个行业实现向上的跃迁</li>
</ul>
<p><strong>以产品支撑未来，以内容构建想象，以流量塑造价值，以成长撬动增长</strong></p>
<p><strong>原文链接</strong></p>
<ul>
<li><a href="https://mp.weixin.qq.com/s/ubSBP5tIPWlIu4wiSBtWVw">巨量引擎如何带动商业产品跃迁</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Search Ads Monetization</title>
            <link>https://www.marshalgao.com/search-ads-monetization/</link>
            <pubDate>Sat, 21 Nov 2020 17:19:58 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/search-ads-monetization/</guid>
            <description>什么是搜索广告
简单来书，当用户在搜索引擎上输入关键字进行查询，看到的广告。现如今，最为常见的就是置顶广告，比如Google，百度。可以将置顶广告理解为选女团的过程，经过层层筛选，最终选出合适的广告，按照顺序展示给用户。那么Google是如何优化自己的推荐算法的呢？根据Amy Shuen的一篇文章，Google利用跟踪用户上网记录（cookie）以及点击反馈来不断优化自己的推荐算法。
价格置顶的决策过程
 查询理解  查询清洗，忽略停止词  自动忽略或过滤掉一些在查询过程中没有意义的虚字，以此节省存储空间和提高搜索效率 分词，比如将【产品经理】分成【产品】和【经理】去进行查询 查询扩展（为了尽可能多的触达用户，给广告主自动拓展查询词，扩大广告主的采买流量）  精确匹配  【用户查询词】与【广告主投放关键词】完全匹配 例如，【用户查询词】为【产品】，【广告主投放关键词】必须是【产品】，才会触发广告  短语匹配  【用户查询词】完全包含【广告主投放关键词】 例如，【用户查询词】为【高级产品经理】，【广告主投放关键词】必须是【产品经理】，触发广告  广泛匹配  【用户查询词】与【广告主投放关键词】高度相关 例如，【用户查询词】为【销售代表】，【广告主投放关键词】必须是【销售经理】，触发广告     检索广告  在广告库里找到所有匹配用户查询词的广告，包括所有符合/部分符合 可以利用倒排索引进行相关权重计算，但工业界并不这么做 工业界会针对这些查询，有哪些广告被点击，把这些信息全部提取出来，然后进行人工标注。每个标签就会对应一个相关分，标签贴好后，就有一部分训练数据了，这个时候就可以做监督学习，或者用更多的feature来做监督学习  广告初滤  广告相关度低的需要过滤 广告出价低的需要过滤  广告排序，选择TOPK广告  根据广告本身质量排序 根据广告主的出价排序 排序分=广告质量分\(\times\)广告出价  广告质量分=0.8\(\times\)点击率+0.25\(\times\)相关度得分（但各家公司算法不公开，是商业机密，所以这里只是简单的一种表达式）   广告收费  按照第二高价来收费  可以确保拍卖人拍出心理价格 因为如果按出价收费，那买方往往为了保障自己的利益，出价往往要略低于心理价格 使用第二高价时买方可能以心理价格或略高于心理价格出价  实际应用中，是给买方提供一个价格区间，最大化保障买方利益，节省买方频繁登录系统，进行改价的时间成本   展示广告
 定义  指的是投放在第三方网站上的视觉广告 基于用户行为和人口统计等因素，以个人或群体为目标  优点适用场景对比  搜索广告  当顾客去谷歌或必应搜索“best running shoe for men over 40”时，顾客的意图可能是要研究或购买跑鞋 搜索广告“拉动”了顾客，顾客已经有意向要买跑鞋，这则广告只是简单地显示了这一意图 搜索广告可针对客户意向，这意味着搜索广告可能更适合作为广告基础，而不是促销或事件的方式 如果搜索广告匹配如“all shoes on sale”（所有打折鞋）那样的关键词，那就没什么意义了，因为这个宽泛的搜索可能与顾客的意图不匹配 策略  购买搜索广告，以作为更广泛基础的一部分 优先关注你的最高转化率的产品 使用单个关键词广告组，这样你的广告文案才能精确匹配顾客意图 为每个广告组创建一个优化的登陆页面  优化的登陆页面可能会给你的广告一个更高的质量分数，这意味着你可以用相对较低的价格获得更好的广告位 一个相关的登陆页也可提高转化率    展示广告  一个潜在的顾客正在阅读一篇关于四十多岁男性健康的文章 这篇文章页面包括一个推广跑步的展示广告，该广告可以帮他找到最舒适的跑鞋 读者关注的是这篇文章，但广告把他引导到了一个优化的登陆页面，目的是让他相信，跑步会改善他的健康状况，而一双特别的鞋子会使跑步更舒适 展示广告试图在最佳时机向合适的人展示正确的信息 展示广告可能总是被当成是一种干扰，但如果时机恰当且内容相关，它可能变成一种积极的干扰，可能激发顾客购买并取悦顾客 策略  再营销广告  顾客看了没买，给予二次推荐（相似产品也可） 同搜索广告一样，是基础性的，这意味着电商企业可能需要一直都运行着这个广告 再营销广告需要使用到一个能够跟踪站点访问者的广告网络  促销与优惠  一家全场都打折的跑鞋网店，可能会希望使用展示广告来推广他们的促销活动 或者，这家网店可能刚刚推出了新系列跑鞋，并希望向潜在客户推广 如何定位潜在客户  网站用户构成统计：向拥有购买倾向用户群的网站投放展示广告 网页主题：根据特定网页的主题投放展示广告 关键词：在一个给定的网页内，根据关键词投放展示广告 类似顾客：针对与你的顾客相似的用户投放展示广告      展示广告能推广特定优惠活动，但电商企业可能不会一直使用它 相反，这类广告在特定的时间内投放，可完成特定的目标  </description>
            <content type="html"><![CDATA[<p><strong>什么是搜索广告</strong></p>

<p>简单来书，当用户在搜索引擎上输入关键字进行查询，看到的广告。现如今，最为常见的就是置顶广告，比如Google，百度。可以将置顶广告理解为选女团的过程，经过层层筛选，最终选出合适的广告，按照顺序展示给用户。那么Google是如何优化自己的推荐算法的呢？根据Amy Shuen的一篇文章，Google利用跟踪用户上网记录（cookie）以及点击反馈来不断优化自己的推荐算法。</p>

<p><strong>价格置顶的决策过程</strong></p>

<ul>
<li>查询理解

<ul>
<li>查询清洗，忽略停止词

<ul>
<li>自动忽略或过滤掉一些在查询过程中没有意义的虚字，以此节省存储空间和提高搜索效率</li>
<li>分词，比如将【产品经理】分成【产品】和【经理】去进行查询</li>
<li>查询扩展（为了尽可能多的触达用户，给广告主自动拓展查询词，扩大广告主的采买流量）

<ul>
<li>精确匹配

<ul>
<li>【用户查询词】与【广告主投放关键词】完全匹配</li>
<li>例如，【用户查询词】为【产品】，【广告主投放关键词】必须是【产品】，才会触发广告</li>
</ul></li>
<li>短语匹配

<ul>
<li>【用户查询词】完全包含【广告主投放关键词】</li>
<li>例如，【用户查询词】为【高级产品经理】，【广告主投放关键词】必须是【产品经理】，触发广告</li>
</ul></li>
<li>广泛匹配

<ul>
<li>【用户查询词】与【广告主投放关键词】高度相关</li>
<li>例如，【用户查询词】为【销售代表】，【广告主投放关键词】必须是【销售经理】，触发广告</li>
</ul></li>
</ul></li>
</ul></li>
</ul></li>
<li>检索广告

<ul>
<li>在广告库里找到所有匹配用户查询词的广告，包括所有符合/部分符合</li>
<li>可以利用倒排索引进行相关权重计算，但工业界并不这么做</li>
<li>工业界会针对这些查询，有哪些广告被点击，把这些信息全部提取出来，然后进行人工标注。每个标签就会对应一个相关分，标签贴好后，就有一部分训练数据了，这个时候就可以做监督学习，或者用更多的feature来做监督学习</li>
</ul></li>
<li>广告初滤

<ul>
<li>广告相关度低的需要过滤</li>
<li>广告出价低的需要过滤</li>
</ul></li>
<li>广告排序，选择TOPK广告

<ul>
<li>根据广告本身质量排序</li>
<li>根据广告主的出价排序</li>
<li>排序分=广告质量分<span  class="math">\(\times\)</span>广告出价

<ul>
<li>广告质量分=0.8<span  class="math">\(\times\)</span>点击率+0.25<span  class="math">\(\times\)</span>相关度得分（但各家公司算法不公开，是商业机密，所以这里只是简单的一种表达式）</li>
</ul></li>
</ul></li>
<li>广告收费

<ul>
<li>按照第二高价来收费

<ul>
<li>可以确保拍卖人拍出心理价格</li>
<li>因为如果按出价收费，那买方往往为了保障自己的利益，出价往往要略低于心理价格</li>
<li>使用第二高价时买方可能以心理价格或略高于心理价格出价</li>
</ul></li>
<li>实际应用中，是给买方提供一个价格区间，最大化保障买方利益，节省买方频繁登录系统，进行改价的时间成本</li>
</ul></li>
</ul>

<p><strong>展示广告</strong></p>

<ul>
<li>定义

<ul>
<li>指的是投放在第三方网站上的视觉广告</li>
<li>基于用户行为和人口统计等因素，以个人或群体为目标</li>
</ul></li>
<li>优点适用场景对比

<ul>
<li>搜索广告

<ul>
<li>当顾客去谷歌或必应搜索“best running shoe for men over 40”时，顾客的意图可能是要研究或购买跑鞋</li>
<li>搜索广告“拉动”了顾客，顾客已经有意向要买跑鞋，这则广告只是简单地显示了这一意图</li>
<li>搜索广告可针对客户意向，这意味着搜索广告可能更适合作为广告基础，而不是促销或事件的方式</li>
<li>如果搜索广告匹配如“all shoes on sale”（所有打折鞋）那样的关键词，那就没什么意义了，因为这个宽泛的搜索可能与顾客的意图不匹配</li>
<li>策略

<ul>
<li>购买搜索广告，以作为更广泛基础的一部分</li>
<li>优先关注你的最高转化率的产品</li>
<li>使用单个关键词广告组，这样你的广告文案才能精确匹配顾客意图</li>
<li>为每个广告组创建一个优化的登陆页面

<ul>
<li>优化的登陆页面可能会给你的广告一个更高的质量分数，这意味着你可以用相对较低的价格获得更好的广告位</li>
<li>一个相关的登陆页也可提高转化率</li>
</ul></li>
</ul></li>
</ul></li>
<li>展示广告

<ul>
<li>一个潜在的顾客正在阅读一篇关于四十多岁男性健康的文章</li>
<li>这篇文章页面包括一个推广跑步的展示广告，该广告可以帮他找到最舒适的跑鞋</li>
<li>读者关注的是这篇文章，但广告把他引导到了一个优化的登陆页面，目的是让他相信，跑步会改善他的健康状况，而一双特别的鞋子会使跑步更舒适</li>
<li>展示广告试图在最佳时机向合适的人展示正确的信息</li>
<li>展示广告可能总是被当成是一种干扰，但如果时机恰当且内容相关，它可能变成一种积极的干扰，可能激发顾客购买并取悦顾客</li>
<li>策略

<ul>
<li>再营销广告

<ul>
<li>顾客看了没买，给予二次推荐（相似产品也可）</li>
<li>同搜索广告一样，是基础性的，这意味着电商企业可能需要一直都运行着这个广告</li>
<li>再营销广告需要使用到一个能够跟踪站点访问者的广告网络</li>
</ul></li>
<li>促销与优惠

<ul>
<li>一家全场都打折的跑鞋网店，可能会希望使用展示广告来推广他们的促销活动</li>
<li>或者，这家网店可能刚刚推出了新系列跑鞋，并希望向潜在客户推广</li>
<li>如何定位潜在客户

<ul>
<li>网站用户构成统计：向拥有购买倾向用户群的网站投放展示广告</li>
<li>网页主题：根据特定网页的主题投放展示广告</li>
<li>关键词：在一个给定的网页内，根据关键词投放展示广告</li>
<li>类似顾客：针对与你的顾客相似的用户投放展示广告</li>
</ul></li>
</ul></li>
</ul></li>
</ul></li>
</ul></li>
<li>展示广告能推广特定优惠活动，但电商企业可能不会一直使用它</li>
<li>相反，这类广告在特定的时间内投放，可完成特定的目标</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>User Portrait</title>
            <link>https://www.marshalgao.com/user-portrait/</link>
            <pubDate>Sat, 21 Nov 2020 15:15:36 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/user-portrait/</guid>
            <description>什么是用户画像
用户画像可以简单理解为海量数据的标签。根据用户的目标、行为和观点的差异，将他们区分为不同的类型，然后每种类型中抽取出典型特征，赋予名字、照片、一些人口统计学要素、场景等描述，形成一个人物原型（personas）。 用户画像能帮助广告主找到对的人
 准确识别用户  目的是为了区分用户、单点定位 可以利用cookie、注册ID、邮箱、微信/微博/QQ等第三方登录、手机号（目前移动端最为准确的用户标识）等 微博/微信/QQ等第三方登录成为企业识别用户的折中选择（用户注册意愿不强）    动态跟踪用户行为轨迹  确认用户不同场景下的不同访问轨迹，助力广告主跨端控频营销 三大纬度：场景+媒体+路径 场景主要包括访问设备、访问时段 媒体指某一时段下用户具体访问的媒体  例如，咨询类、视频类、游戏类、社交类等   路径指用户进入和离开某媒体的路径，可以简单理解为用户站内与站外行为  例如，通过搜素导航进入还是直接打开APP，离开时是站内跳转到其他网页还是直接关闭 有助于媒体自身优化流量运营 帮助广告主有效控制不同页面的投放频次，避免产生用户倦怠      结合静态数据评估用户价值  静态数据获取后，需要对人群进行因子和聚类分析  对于产品设计来说，按照使用动机或使用行为划分是最为常见的方式 对于营销类媒体来说，按照消费形态来区分人群是最为直接的分类方式   五大纬度：人口属性+商业属性+消费特征+生活形态+CRM 数据挖掘是最为常见、较为精准的一种方式 数据有限  定性补充  小组座谈会 用户访谈 日志法 Laddering阶梯法 透射法   定量补充  定量问卷调研的方式，关键在于后期定量数据的建模与分析（目的是对定性假设进行验证，获取市场用户分布规律）        用户标签定义与权重  从繁杂的数据中抽取共同的特征值 根据特征值对群体进行定义，有助于广告主掌握该群体的特性  例如，“时尚小咖”，可以快速的联想到针对这类人，时尚感至关重要，即产品的设计感、外观等，并且小咖两字表明该类人并不盲目追求潮流，他们有自己的审美观，并且能够影响身边的人   一个群体会有多个标签，不同的群体之间也会有标签的重合，标签权重反映了不同群体的核心特征  例如，“时尚小咖”和“科技先锋”两类人群中都有女性标签，此时需要比较女性在不同人群中的标签权重，以决定将该标签解读给哪类群体 通常，一个好的用户画像，不同人群之间的标签重合度较小，只有在那些权重较小的标签上会有些许重合     不同人群优先级排列  大部分用户画像完成上述4步就结束了，然而根据企业自身情况排列组合，才决定了最终效果的落地 组合策略可以按照频率的高低、市场的大小、收益的潜力、竞争优势等 企业在不同阶段对于不同人群优先级的排列不同    </description>
            <content type="html"><![CDATA[<p><strong>什么是用户画像</strong></p>
<p>用户画像可以简单理解为海量数据的标签。根据用户的目标、行为和观点的差异，将他们区分为不同的类型，然后每种类型中抽取出典型特征，赋予名字、照片、一些人口统计学要素、场景等描述，形成一个人物原型（personas）。
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/LnfZ8F6TErUOW104Ujdk.jpg" alt=""></p>
<p><strong>用户画像能帮助广告主找到对的人</strong></p>
<ul>
<li>准确识别用户
<ul>
<li>目的是为了区分用户、单点定位</li>
<li>可以利用cookie、注册ID、邮箱、微信/微博/QQ等第三方登录、手机号（目前移动端最为准确的用户标识）等</li>
<li>微博/微信/QQ等第三方登录成为企业识别用户的折中选择（用户注册意愿不强）
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/FtBNojTi6Aogs98YxnTc.jpg" alt=""></li>
</ul>
</li>
<li>动态跟踪用户行为轨迹
<ul>
<li>确认用户不同场景下的不同访问轨迹，助力广告主跨端控频营销</li>
<li>三大纬度：场景+媒体+路径</li>
<li>场景主要包括访问设备、访问时段</li>
<li>媒体指某一时段下用户具体访问的媒体
<ul>
<li>例如，咨询类、视频类、游戏类、社交类等</li>
</ul>
</li>
<li>路径指用户进入和离开某媒体的路径，可以简单理解为用户站内与站外行为
<ul>
<li>例如，通过搜素导航进入还是直接打开APP，离开时是站内跳转到其他网页还是直接关闭</li>
<li>有助于媒体自身优化流量运营</li>
<li>帮助广告主有效控制不同页面的投放频次，避免产生用户倦怠
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/YuZk3QBIzygkxpUzC6Dc.jpg" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>结合静态数据评估用户价值
<ul>
<li>静态数据获取后，需要对人群进行因子和聚类分析
<ul>
<li>对于产品设计来说，按照使用动机或使用行为划分是最为常见的方式</li>
<li>对于营销类媒体来说，按照消费形态来区分人群是最为直接的分类方式</li>
</ul>
</li>
<li>五大纬度：人口属性+商业属性+消费特征+生活形态+CRM</li>
<li>数据挖掘是最为常见、较为精准的一种方式</li>
<li>数据有限
<ul>
<li>定性补充
<ul>
<li>小组座谈会</li>
<li>用户访谈</li>
<li>日志法</li>
<li>Laddering阶梯法</li>
<li>透射法</li>
</ul>
</li>
<li>定量补充
<ul>
<li>定量问卷调研的方式，关键在于后期定量数据的建模与分析（目的是对定性假设进行验证，获取市场用户分布规律）
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/w7cdK2x5eSeTwoblkuU3.jpg" alt=""></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>用户标签定义与权重
<ul>
<li>从繁杂的数据中抽取共同的特征值</li>
<li>根据特征值对群体进行定义，有助于广告主掌握该群体的特性
<ul>
<li>例如，“时尚小咖”，可以快速的联想到针对这类人，时尚感至关重要，即产品的设计感、外观等，并且小咖两字表明该类人并不盲目追求潮流，他们有自己的审美观，并且能够影响身边的人</li>
</ul>
</li>
<li>一个群体会有多个标签，不同的群体之间也会有标签的重合，标签权重反映了不同群体的核心特征
<ul>
<li>例如，“时尚小咖”和“科技先锋”两类人群中都有女性标签，此时需要比较女性在不同人群中的标签权重，以决定将该标签解读给哪类群体</li>
<li>通常，一个好的用户画像，不同人群之间的标签重合度较小，只有在那些权重较小的标签上会有些许重合</li>
</ul>
</li>
</ul>
</li>
<li>不同人群优先级排列
<ul>
<li>大部分用户画像完成上述4步就结束了，然而根据企业自身情况排列组合，才决定了最终效果的落地</li>
<li>组合策略可以按照频率的高低、市场的大小、收益的潜力、竞争优势等</li>
<li>企业在不同阶段对于不同人群优先级的排列不同</li>
</ul>
</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Flow Monetization Mechanism</title>
            <link>https://www.marshalgao.com/flow-monetization-mechanism/</link>
            <pubDate>Fri, 20 Nov 2020 21:27:37 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/flow-monetization-mechanism/</guid>
            <description>增值服务变现（内容付费、服务付费）
 该种模式是目前流量变现的首选 优点  一旦满足了消费者想要的价值，就会有持续稳定的收入 用户粘性高 品牌忠诚度高   劣势  如何持续保持内容和服务质量   举例  知乎 得到 腾讯课堂 网易公开课    流量引导（APP引流外部）
 通过APP内部的功能和板块实现用户引流，并收取一定的费用 开发者把平台自身流量引导至搜索引擎并收取佣金  需要基于庞大的流量基数    电商变现
 内部电商CPS（Cost Per Sales）  商家把商品放到APP上进行售卖 增加展示机会入口引流到店铺，实现沟通转化 进行CPS分成，完成变现   导购变现  主要是一些独立的网站、APP产品 通过内容、社区，具备了足够的用户量和活跃度 在平台搭建商品展示页面 通过与购物平台分销、广告系统合作，进行招商、上下架、结算等工作   自营电商平台  与导购相比，自营电商自主搭建系统，包括频道、订单、支付的全套系统 自主把控商品品质和服务 盈利空间更大 需投入大量人力物力 出现产品问题，会引发消费者厌恶和抵制，出现连锁反应    网络直播
 打赏占直播收入的90% 直播互动游戏 平台、主播、用户三方关系维护  广告变现
 传统排期广告  以固定CPT（Cost Per Time）方式进行结算 技术人员手动操作广告上线素材，一般在开屏或者是某个固定的banner位 优点  视觉冲击强，适合品牌广告投放   缺点  由于人群未精准划分，对于效果广告效果一般 从商务对接排期到技术上线是有时间和人员成本的     自主搭建程序化广告  媒体团队达到一定体量之后，加以技术团队的扶持，搭建自己的广告平台 优点  可以自主把控行业、广告内容、流量分配以及代理政策   缺点  由于系统庞大，搭建耗时耗力，容易错过市场先机 搭建过程中人力物力以及时间成本过于高昂     接入广告联盟  现阶段较快的变现手段之一，比如接入BAT三大广告联盟 优点  快速实现变现 不需要投入过多人力   缺点  广告内容无法把控，主要依赖于联盟团队的审核 广告质量无法把控，用户体验容易受到影响 流量价值无法体现，联盟交易的环境是不透明的，媒体、广告主不清楚投放的位置和效果来源 广告的收入受限，广告收入分润比例不高，还面临扣量核减等意外风险     接入DSP  通过API/SDK的方式快速对接DSP，借助其完善的广告投放工具、用户多维画像分析的DMP（Date Management Platform）对数据进行加工赋能以及获取丰富且高质量的广告主资源的能力 SSP选择考虑角度  DSP过往客户类型是否是高质量的广告主 产品契合度 DSP团队实力，是否有强硬的技术和数据算法支持      未来流量变现趋势</description>
            <content type="html"><![CDATA[<p><strong>增值服务变现（内容付费、服务付费）</strong></p>
<ul>
<li>该种模式是目前流量变现的首选</li>
<li>优点
<ul>
<li>一旦满足了消费者想要的价值，就会有持续稳定的收入</li>
<li>用户粘性高</li>
<li>品牌忠诚度高</li>
</ul>
</li>
<li>劣势
<ul>
<li>如何持续保持内容和服务质量</li>
</ul>
</li>
<li>举例
<ul>
<li>知乎</li>
<li>得到</li>
<li>腾讯课堂</li>
<li>网易公开课</li>
</ul>
</li>
</ul>
<p><strong>流量引导（APP引流外部）</strong></p>
<ul>
<li>通过APP内部的功能和板块实现用户引流，并收取一定的费用</li>
<li>开发者把平台自身流量引导至搜索引擎并收取佣金
<ul>
<li>需要基于庞大的流量基数</li>
</ul>
</li>
</ul>
<p><strong>电商变现</strong></p>
<ul>
<li>内部电商CPS（Cost Per Sales）
<ul>
<li>商家把商品放到APP上进行售卖</li>
<li>增加展示机会入口引流到店铺，实现沟通转化</li>
<li>进行CPS分成，完成变现</li>
</ul>
</li>
<li>导购变现
<ul>
<li>主要是一些独立的网站、APP产品</li>
<li>通过内容、社区，具备了足够的用户量和活跃度</li>
<li>在平台搭建商品展示页面</li>
<li>通过与购物平台分销、广告系统合作，进行招商、上下架、结算等工作</li>
</ul>
</li>
<li>自营电商平台
<ul>
<li>与导购相比，自营电商自主搭建系统，包括频道、订单、支付的全套系统</li>
<li>自主把控商品品质和服务</li>
<li>盈利空间更大</li>
<li>需投入大量人力物力</li>
<li>出现产品问题，会引发消费者厌恶和抵制，出现连锁反应</li>
</ul>
</li>
</ul>
<p><strong>网络直播</strong></p>
<ul>
<li>打赏占直播收入的90%</li>
<li>直播互动游戏</li>
<li>平台、主播、用户三方关系维护</li>
</ul>
<p><strong>广告变现</strong></p>
<ul>
<li>传统排期广告
<ul>
<li>以固定CPT（Cost Per Time）方式进行结算</li>
<li>技术人员手动操作广告上线素材，一般在开屏或者是某个固定的banner位</li>
<li>优点
<ul>
<li>视觉冲击强，适合品牌广告投放</li>
</ul>
</li>
<li>缺点
<ul>
<li>由于人群未精准划分，对于效果广告效果一般</li>
<li>从商务对接排期到技术上线是有时间和人员成本的</li>
</ul>
</li>
</ul>
</li>
<li>自主搭建程序化广告
<ul>
<li>媒体团队达到一定体量之后，加以技术团队的扶持，搭建自己的广告平台</li>
<li>优点
<ul>
<li>可以自主把控行业、广告内容、流量分配以及代理政策</li>
</ul>
</li>
<li>缺点
<ul>
<li>由于系统庞大，搭建耗时耗力，容易错过市场先机</li>
<li>搭建过程中人力物力以及时间成本过于高昂</li>
</ul>
</li>
</ul>
</li>
<li>接入广告联盟
<ul>
<li>现阶段较快的变现手段之一，比如接入BAT三大广告联盟</li>
<li>优点
<ul>
<li>快速实现变现</li>
<li>不需要投入过多人力</li>
</ul>
</li>
<li>缺点
<ul>
<li>广告内容无法把控，主要依赖于联盟团队的审核</li>
<li>广告质量无法把控，用户体验容易受到影响</li>
<li>流量价值无法体现，联盟交易的环境是不透明的，媒体、广告主不清楚投放的位置和效果来源</li>
<li>广告的收入受限，广告收入分润比例不高，还面临扣量核减等意外风险</li>
</ul>
</li>
</ul>
</li>
<li>接入DSP
<ul>
<li>通过API/SDK的方式快速对接DSP，借助其完善的广告投放工具、用户多维画像分析的DMP（Date Management Platform）对数据进行加工赋能以及获取丰富且高质量的广告主资源的能力</li>
<li>SSP选择考虑角度
<ul>
<li>DSP过往客户类型是否是高质量的广告主</li>
<li>产品契合度</li>
<li>DSP团队实力，是否有强硬的技术和数据算法支持</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>未来流量变现趋势</strong></p>
<ul>
<li>流量变现将更加注重用户的服务和体验</li>
<li>APP自身提供的内容和增值服务是变现的首选，需要保持高质量的内容输出，维持长期的收入稳定</li>
<li>广告原生化是移动广告的未来，同时赋予更多的自主审核权</li>
<li>程序化广告是互联网广告最为高效的售卖方式，甚至可以直接购买SaaS产品完成程序化广告平台的搭建</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Report of Cloud Computing in China</title>
            <link>https://www.marshalgao.com/report-of-cloud-computing-in-china/</link>
            <pubDate>Fri, 20 Nov 2020 00:03:13 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/report-of-cloud-computing-in-china/</guid>
            <description>一、概览
云计算可以分为公有云、私有云以及混合云。公有云是指第三方提供商为用户提供可以部分可以使用的云服务，这类服务通常来说价格低廉。私有云是指第三方提供商根据相关企业的结构，进行定制的云服务，这类服务的价格较高。而混合云可以理解为是将公有云和私有云进行了融合。
针对上述抽象的概念，以一个生活场景进行类比。当用户自己在家做饭需要购买食材以及锅碗，这就是“公有云”。当用户选择在饭店进行就餐，不需要繁杂的程序，这就是“私有云”。而用户选择将饭店的厨师请到家里来做饭，可以理解为“混合云”的场景。
而云计算的服务类型，可以分为三类，分别是基础设施既服务（IaaS）、平台既服务（PaaS）、软件既服务（SaaS）。同样地，用生活场景进行类比。IaaS可以理解购买商品房，用户为毛坯房买单，后续房屋的用途以及装修风格由用户自己来决定。PaaS可以理解为租房，房东已经将房子装修好，但用户对房屋的使用目的有一定的限制。SaaS可以理解为酒店，用户只需要付费并享受服务即可，且不需要关心房屋的维修以及其他问题。
二、云计算行业发展概况
2.1 利好政策驱动行业发展
随着云计算逐渐成为新型的信息基础设施，各国政府纷纷开始重视云计算行业的发展，并制定国家战略和行动计划，引导行业发展。
2020，中国政府出台了多项政策鼓励云计算的发展。国家大力鼓励探索大数据、人工智能、云计算、数字孪生、5G、物联网和区块链等新一代数字技术应用和集成创新，并再一次明确了云计算在实现行业或企业数字化转型的重要地位。
2.2 企业云计算应用率逐步提升
根据中国信息通信研究院的云计算发展调查报告显示，2019年中国已经应用云计算的企业占比达到66.1%，同比增长7.5%。其中，企业应用公有云占比41.6%，同比增长5.2%。应用私有云的企业占比14.7%，同比小幅增长。同时，有9.8%的企业采用混合云，同比增长1.7%。
2.3 公有云市场份额反超私有云
按运营模式来看，2019年我国公有云的市场份额已经反超私有云，达689.3亿元。据中国信息通信研究院预测，至2023年，我国公有云和私有云市场规模将分别达到2307.2亿元和1446.8亿元。
2.4 云计算行业未来发展
在未来，我国云计算行业将继续保持高速发展的态势。一方面，企业应用云计算降本增效效果显著。根据调查显示，95%的企业认为使用云计算可以降低企业的IT成本。其中，超过10%的用户成本节约在一半以上。
另一方面，当前全球数字经济发展迅猛，云计算已经成为企业数字化转型的必然选择和必经之路。根据中国信息通信研究院的数据显示，我国数字经济的总体规模已从2005年的2.62万亿元增长至2019年的35.84万亿元。数字经济总体规模占GDP的比重从2005年的14.2%提升至2019年的36.2%。由此可见，数字经济已经成为我国国民经济增长的重要动力。
三、公有云发展概况
3.1 市场规模
Frost &amp;amp; Sullivan近日发布的中国公有云市场的调研报告显示，2020年第二季度中国公有云市场达到304.1亿元人民币，同比增长42.6%。其中阿里云、腾讯云、金山云、华为云以及天翼云共同跻身于中国云计算市场快速发展TOP 5厂商。
在IaaS和IaaS + PaaS市场中，TOP 5厂商的市场份额分别占88.2%和88.3%。其中，腾讯云位列行业第二，收入增长主要来源于互联网公司以及公共服务领域客户的云服务用量增加。
3.2 市场发展
从细分市场来看，2019年，我国公有云市场仍然以IaaS服务为主，占比65.7%，同比增长3.8%。而SaaS服务的市场份额有一定减少，且纵观全球市场，我国的SaaS服务在未来仍具极大的发展空间。
3.3 未来趋势
纵观全球云计算行业发展，根据Gartner发布的数据，预计2021年全球公有云服务终端用户消费将达到3049亿美元，同比增长18%。同时，疫情更近一步的印证了云服务的价值，用户可以按需使用，随时扩展规模以达到成本效益、可持续性的发展以及企业数字化转型计划，而公有云服务的增加亦带动了云服务应用成为新常态。自疫情爆发以来，中小企业信息服务开销不断转向公有云，预计2024年云服务将占据全球企业信息技术开销的14.2%，而相比2020年该项仅占据9.1%。虽然目前SaaS服务市场份额仍然最大，预计2021年将达到1777亿美元，但PaaS的利润率正在不断上升。
在中国，根据中国信息通信研究院发布的数据，2012-2019年，我国公有云市场规模基本保持40%以上的增长速度。在2019年，我国公有云市场规模达到689.3亿元，同比增长57.6%。同年，我国公有云市场规模超越私有云。
随着后疫情时代的到来，5G商业化和智能产业化需求的不断提升，公有云服务将于众多行业融合，进一步推动企业数字化转型，同时为中国公有云市场注入新的活力。兼具互联网优势业务与传统企业深耕经验的云计算企业，能够叠加传统业务升级和新兴技术的势能，在市场上表现出不俗的发展潜力。公有云是未来的一个发展趋势，由于现如今大部分中小企业选择公有云的原因在于公有云自身的一些优势，比如按使用付费、价格相对低廉。而这一优势在云服务的长期发展来看，将会不断被放大。随着企业数字化转型的不断深入，公有云服务的价值将得以全面释放。
四、私有云发展概况
4.1 市场规模
据统计，2019年中国私有云市场规模达645亿元，同比增长22.8%。预计在未来几年将保持持续平稳的增长，并有期望在2023市场规模达到1447亿元。
4.2 市场发展
4.2.1 硬件占主导地位
在私有云市场中，硬件占据主要的市场份额，在2018年已经达到371亿元，占比70.6%。
为了更好满足业务发展需要，迎合云计算市场的发展趋势，政府、金融、电信、交通、制造、能源等领域的企业或部门正在进行数字化转型，这为私有云带来了巨大的市场。2019年中国私有云市场规模达到817.4亿元，虽然硬件占据主导地位，但相比前几年而言，硬件市场规模在私有云市场中占比不断下降。相反地，软件作用凸显，其市场规模不断上升。2019年中国私有云软件市场规模达到129.9亿元，占私有云市场规模的15.9%。
4.2.2 系用平台规模上升
私有云系统平台是私有云的核心组成部分，其为数据中心云化和大型企业事业单位建立私有云提供了强有力的保障，并在私有云市场中的地位不断上升。2016-2019年，中国私有云系统平台市场规模逐年上升。在2019年，其市场规模已经达到27.4亿元，同比增长51.4%。虽然系统平台相关市场的占比超过30%，且仍然存在着巨大的增长空间。
4.2.3 IaaS为主要产品
2019年中国IaaS市场规模为21.5亿元，占私有云系统平台市场规模的78.3%。容器云平台为应用提供标准化的运行环境，其在2019年中国市场规模为5.9亿元，占私有云系统平台市场规模的21.7%。
私有云系统平台发展具有明显的行业化集中态势。政府、金融和电信成为应用私有云的主要行业，2019年中国这三大行业的私有云使用占市场份额的67.1%。交通、教育、制造业、能源和医疗卫生也是中国应用私有云的重要行业，分别占市场份额的6.2%、5.5%、5.1%、3.6%和2.9%。
4.3未来趋势
私有云系统存在于防火墙之内，只为内部服务，优势是管理和控制方便。但与公有云相比，私有云的安全性更好，但成本过高。
面临人脸识别、人工智能等新应用的出现，政企客户采用私有云的模式已经不能满足其需求，必须借助腾讯、阿里等公有云的服务。同时私有云的模式在面临互联网不可预测的访问、流量攻击时也面临较大的压力，必须将面向互联网的业务放在公有云。
所以，将私有云定位为解决政企客户内部的应用服务，并引入公有云的PaaS人工智能服务、高流量安全保障的机制，实现混合云。这或许是更为有效的一种折中方案。</description>
            <content type="html"><![CDATA[<p><strong>一、概览</strong></p>
<p>云计算可以分为公有云、私有云以及混合云。公有云是指第三方提供商为用户提供可以部分可以使用的云服务，这类服务通常来说价格低廉。私有云是指第三方提供商根据相关企业的结构，进行定制的云服务，这类服务的价格较高。而混合云可以理解为是将公有云和私有云进行了融合。</p>
<p>针对上述抽象的概念，以一个生活场景进行类比。当用户自己在家做饭需要购买食材以及锅碗，这就是“公有云”。当用户选择在饭店进行就餐，不需要繁杂的程序，这就是“私有云”。而用户选择将饭店的厨师请到家里来做饭，可以理解为“混合云”的场景。</p>
<p>而云计算的服务类型，可以分为三类，分别是基础设施既服务（IaaS）、平台既服务（PaaS）、软件既服务（SaaS）。同样地，用生活场景进行类比。IaaS可以理解购买商品房，用户为毛坯房买单，后续房屋的用途以及装修风格由用户自己来决定。PaaS可以理解为租房，房东已经将房子装修好，但用户对房屋的使用目的有一定的限制。SaaS可以理解为酒店，用户只需要付费并享受服务即可，且不需要关心房屋的维修以及其他问题。</p>
<p><strong>二、云计算行业发展概况</strong></p>
<p><strong>2.1 利好政策驱动行业发展</strong></p>
<p>随着云计算逐渐成为新型的信息基础设施，各国政府纷纷开始重视云计算行业的发展，并制定国家战略和行动计划，引导行业发展。</p>
<p>2020，中国政府出台了多项政策鼓励云计算的发展。国家大力鼓励探索大数据、人工智能、云计算、数字孪生、5G、物联网和区块链等新一代数字技术应用和集成创新，并再一次明确了云计算在实现行业或企业数字化转型的重要地位。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112001.png" alt=""></p>
<p><strong>2.2 企业云计算应用率逐步提升</strong></p>
<p>根据中国信息通信研究院的云计算发展调查报告显示，2019年中国已经应用云计算的企业占比达到66.1%，同比增长7.5%。其中，企业应用公有云占比41.6%，同比增长5.2%。应用私有云的企业占比14.7%，同比小幅增长。同时，有9.8%的企业采用混合云，同比增长1.7%。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112002.png" alt=""></p>
<p><strong>2.3 公有云市场份额反超私有云</strong></p>
<p>按运营模式来看，2019年我国公有云的市场份额已经反超私有云，达689.3亿元。据中国信息通信研究院预测，至2023年，我国公有云和私有云市场规模将分别达到2307.2亿元和1446.8亿元。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112003.png" alt=""></p>
<p><strong>2.4 云计算行业未来发展</strong></p>
<p>在未来，我国云计算行业将继续保持高速发展的态势。一方面，企业应用云计算降本增效效果显著。根据调查显示，95%的企业认为使用云计算可以降低企业的IT成本。其中，超过10%的用户成本节约在一半以上。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112005.png" alt=""></p>
<p>另一方面，当前全球数字经济发展迅猛，云计算已经成为企业数字化转型的必然选择和必经之路。根据中国信息通信研究院的数据显示，我国数字经济的总体规模已从2005年的2.62万亿元增长至2019年的35.84万亿元。数字经济总体规模占GDP的比重从2005年的14.2%提升至2019年的36.2%。由此可见，数字经济已经成为我国国民经济增长的重要动力。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112006.png" alt=""></p>
<p><strong>三、公有云发展概况</strong></p>
<p><strong>3.1 市场规模</strong></p>
<p>Frost &amp; Sullivan近日发布的中国公有云市场的调研报告显示，2020年第二季度中国公有云市场达到304.1亿元人民币，同比增长42.6%。其中阿里云、腾讯云、金山云、华为云以及天翼云共同跻身于中国云计算市场快速发展TOP 5厂商。</p>
<p>在IaaS和IaaS + PaaS市场中，TOP 5厂商的市场份额分别占88.2%和88.3%。其中，腾讯云位列行业第二，收入增长主要来源于互联网公司以及公共服务领域客户的云服务用量增加。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112007.png" alt=""></p>
<p><strong>3.2 市场发展</strong></p>
<p>从细分市场来看，2019年，我国公有云市场仍然以IaaS服务为主，占比65.7%，同比增长3.8%。而SaaS服务的市场份额有一定减少，且纵观全球市场，我国的SaaS服务在未来仍具极大的发展空间。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112008.png" alt=""></p>
<p><strong>3.3 未来趋势</strong></p>
<p>纵观全球云计算行业发展，根据Gartner发布的数据，预计2021年全球公有云服务终端用户消费将达到3049亿美元，同比增长18%。同时，疫情更近一步的印证了云服务的价值，用户可以按需使用，随时扩展规模以达到成本效益、可持续性的发展以及企业数字化转型计划，而公有云服务的增加亦带动了云服务应用成为新常态。自疫情爆发以来，中小企业信息服务开销不断转向公有云，预计2024年云服务将占据全球企业信息技术开销的14.2%，而相比2020年该项仅占据9.1%。虽然目前SaaS服务市场份额仍然最大，预计2021年将达到1777亿美元，但PaaS的利润率正在不断上升。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112009.png" alt=""></p>
<p>在中国，根据中国信息通信研究院发布的数据，2012-2019年，我国公有云市场规模基本保持40%以上的增长速度。在2019年，我国公有云市场规模达到689.3亿元，同比增长57.6%。同年，我国公有云市场规模超越私有云。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112010.png" alt=""></p>
<p>随着后疫情时代的到来，5G商业化和智能产业化需求的不断提升，公有云服务将于众多行业融合，进一步推动企业数字化转型，同时为中国公有云市场注入新的活力。兼具互联网优势业务与传统企业深耕经验的云计算企业，能够叠加传统业务升级和新兴技术的势能，在市场上表现出不俗的发展潜力。公有云是未来的一个发展趋势，由于现如今大部分中小企业选择公有云的原因在于公有云自身的一些优势，比如按使用付费、价格相对低廉。而这一优势在云服务的长期发展来看，将会不断被放大。随着企业数字化转型的不断深入，公有云服务的价值将得以全面释放。</p>
<p><strong>四、私有云发展概况</strong></p>
<p><strong>4.1 市场规模</strong></p>
<p>据统计，2019年中国私有云市场规模达645亿元，同比增长22.8%。预计在未来几年将保持持续平稳的增长，并有期望在2023市场规模达到1447亿元。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/112011.png" alt=""></p>
<p><strong>4.2 市场发展</strong></p>
<p>4.2.1 硬件占主导地位</p>
<p>在私有云市场中，硬件占据主要的市场份额，在2018年已经达到371亿元，占比70.6%。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/nimg.ws.126.net1.jpg" alt=""></p>
<p>为了更好满足业务发展需要，迎合云计算市场的发展趋势，政府、金融、电信、交通、制造、能源等领域的企业或部门正在进行数字化转型，这为私有云带来了巨大的市场。2019年中国私有云市场规模达到817.4亿元，虽然硬件占据主导地位，但相比前几年而言，硬件市场规模在私有云市场中占比不断下降。相反地，软件作用凸显，其市场规模不断上升。2019年中国私有云软件市场规模达到129.9亿元，占私有云市场规模的15.9%。</p>
<p>4.2.2 系用平台规模上升</p>
<p>私有云系统平台是私有云的核心组成部分，其为数据中心云化和大型企业事业单位建立私有云提供了强有力的保障，并在私有云市场中的地位不断上升。2016-2019年，中国私有云系统平台市场规模逐年上升。在2019年，其市场规模已经达到27.4亿元，同比增长51.4%。虽然系统平台相关市场的占比超过30%，且仍然存在着巨大的增长空间。</p>
<p>4.2.3 IaaS为主要产品</p>
<p>2019年中国IaaS市场规模为21.5亿元，占私有云系统平台市场规模的78.3%。容器云平台为应用提供标准化的运行环境，其在2019年中国市场规模为5.9亿元，占私有云系统平台市场规模的21.7%。</p>
<p>私有云系统平台发展具有明显的行业化集中态势。政府、金融和电信成为应用私有云的主要行业，2019年中国这三大行业的私有云使用占市场份额的67.1%。交通、教育、制造业、能源和医疗卫生也是中国应用私有云的重要行业，分别占市场份额的6.2%、5.5%、5.1%、3.6%和2.9%。</p>
<p><strong>4.3未来趋势</strong></p>
<p>私有云系统存在于防火墙之内，只为内部服务，优势是管理和控制方便。但与公有云相比，私有云的安全性更好，但成本过高。</p>
<p>面临人脸识别、人工智能等新应用的出现，政企客户采用私有云的模式已经不能满足其需求，必须借助腾讯、阿里等公有云的服务。同时私有云的模式在面临互联网不可预测的访问、流量攻击时也面临较大的压力，必须将面向互联网的业务放在公有云。</p>
<p>所以，将私有云定位为解决政企客户内部的应用服务，并引入公有云的PaaS人工智能服务、高流量安全保障的机制，实现混合云。这或许是更为有效的一种折中方案。</p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/14ei17j5y7.jpg" alt=""></p>
]]></content>
        </item>
        
        <item>
            <title>Intelligent Delivery of Advertising</title>
            <link>https://www.marshalgao.com/intelligent-delivery-of-advertising/</link>
            <pubDate>Tue, 17 Nov 2020 14:19:36 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/intelligent-delivery-of-advertising/</guid>
            <description>智能投放（以腾讯广告为例）
 步骤  做创意（开车出行前汽车加油） 选人群（出行选择路径） 调出价（根据实际情况，调整路线方向和车速）    DC (Dynamic Creative, 动态创意)  正常情况下，根据不同的元素组合，进行A/B测试，选择一个最优的 而DC模式下，元素组合后全部上线，根据不同人群选择一个模式进行投放    人群的智能选择  自动扩量  已经有一批十分明确的核心用户或老客户，向周边辐射   系统优选  面向比如快销品这一类，用户范围大，不明确的情况     Tencent双出价模式  双目标出价  有些客户，对浅层深层两个目标的成本都很关注 这种情况下，系统努力的方向是让两个目标成本都能达成   两阶段出价  有些客户，在意的是主要是深层转化(比如付费) 可是上来就优化深层目标，数据又太稀疏 于是，可以让系统在初期先优化浅层目标(比如激活)以控制买量成本，在深层目标积累到一定数量以后，再切换优化目标，这就是两阶段出价      必要条件  以完善的数据体系和强大的建模能力为支撑（有这种能力的平台少之又少） 有服务大量效果客户的运营实践    原文链接
 从腾讯广告看“智能投放”的产品趋势  </description>
            <content type="html"><![CDATA[<p><strong>智能投放（以腾讯广告为例）</strong></p>
<ul>
<li>步骤
<ul>
<li>做创意（开车出行前汽车加油）</li>
<li>选人群（出行选择路径）</li>
<li>调出价（根据实际情况，调整路线方向和车速）
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/640.jpg" alt=""></li>
</ul>
</li>
<li>DC (Dynamic Creative, 动态创意)
<ul>
<li>正常情况下，根据不同的元素组合，进行A/B测试，选择一个最优的</li>
<li>而DC模式下，元素组合后全部上线，根据不同人群选择一个模式进行投放
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/641.jpg" alt=""></li>
</ul>
</li>
<li>人群的智能选择
<ul>
<li>自动扩量
<ul>
<li>已经有一批十分明确的核心用户或老客户，向周边辐射</li>
</ul>
</li>
<li>系统优选
<ul>
<li>面向比如快销品这一类，用户范围大，不明确的情况</li>
</ul>
</li>
</ul>
</li>
<li>Tencent双出价模式
<ul>
<li>双目标出价
<ul>
<li>有些客户，对浅层深层两个目标的成本都很关注</li>
<li>这种情况下，系统努力的方向是让两个目标成本都能达成</li>
</ul>
</li>
<li>两阶段出价
<ul>
<li>有些客户，在意的是主要是深层转化(比如付费)</li>
<li>可是上来就优化深层目标，数据又太稀疏</li>
<li>于是，可以让系统在初期先优化浅层目标(比如激活)以控制买量成本，在深层目标积累到一定数量以后，再切换优化目标，这就是两阶段出价
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/642.jpg" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>必要条件
<ul>
<li>以完善的数据体系和强大的建模能力为支撑（有这种能力的平台少之又少）</li>
<li>有服务大量效果客户的运营实践</li>
</ul>
</li>
</ul>
<p><strong>原文链接</strong></p>
<ul>
<li><a href="https://mp.weixin.qq.com/s/angSVipEsTlfinL2Wq7lww">从腾讯广告看“智能投放”的产品趋势</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Getting to Know the Internet Advertising System</title>
            <link>https://www.marshalgao.com/getting-to-know-the-internet-advertising-system/</link>
            <pubDate>Mon, 16 Nov 2020 13:58:57 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/getting-to-know-the-internet-advertising-system/</guid>
            <description>互联网广告分类
 社交广告  QQ、微信   搜索广告  百度、Google   媒体广告  抖音、今日头条    广告计费方式
 CPA（每行动成本，Cost Per Action）  指按广告投放实际效果，即按回应的有效问卷或定单来计费，而不限广告投放量。CPA广告是网络中最常见的一种广告形式，当用户点击某个网站上的CPA广告后，这个站的站长就会获得相应的收入。   CPS（每销售成本，Cost Per Sale）  广告是网络广告的一种，广告主为规避广告费用风险，按照广告点击之后产生的实际销售笔数付给广告站点销售提成费用。   CPC（每点击成本，Cost Per Click）  以每点击一次计费。这样的方法加上点击率限制可以加强作弊的难度，网民的每一次点击就会为广告主带来真实的流量或是潜在的消费者，是网络比较成熟的国家常见的收费方式之一。 当前流行的广告系统主流的二价收费的方式。   CPD（按天收费 ，Cost Per Day）  是广告合作的一种常见方式，相比当前比较流行的CPS，优势在于对合作的基础条件没有过高要求，容易促成双方合作；劣势在于其在长期合作中，不如CPS形式实时有效。   CPM（千人成本，Cost Per Mille）  是一种媒体或媒体排期表（SCHEDULING）送达1000人或”家庭”的成本计算单位。千人成本并非是广告主衡量媒体的唯一标准，只是为了对不同媒体进行衡量不得已而制定的一个相对指标。表现形式就是比如你在网站上投放了一个广告，然后有人打开你的网站看到了这个广告，那么就可以给您计费，也就是按照展示量给佣金。   CPE（每参与成本，Cost Per Engagement）  旨在评估用户与品牌之间参与程度的价值。多应用于社交媒体，例如链接点击、喜欢、转发和 “@回复” 等等。另外 CPE 也指用户浏览过广告后，在一定时间内（如一周）与品牌进行的互动。   eCPM (Effective Cost Per Mille)  每一千次展示可以获得的广告收入。 当前流行的广告系统主流的一种竞价方式。   oCPA (Optimized Cost Per Action)  CPA的模式下是按照每转化一次进行收费，oCPA可以理解为在更为精准的投放模式下（特定某一群体），使得转化率更高，即与CPA相比更高的性价比以及转化率。   oCPM (Optimized Cost Per Mille)  CPM的模式下是按照每1000曝光进行收费，oCPM可以理解为采用更精准的点击率和转化率预估机制，将广告展现给最容易产生转化的用户，在获取流量的同时，提高转化率、降低转化成本，跑量提速更快。   一种比较有趣的阐述方式  details    广告投放机制  频次控制  根据平台不同，广告的频次不同。比如微信一天只有两条广告，而头条会有更多。   原生广告  让广告看起来不像广告，成为内容的一部分。   竞价  平台根据用户画像，筛选出适合投放的几种广告，并依靠竞价系统来进行选择。 竞价系统还会结合点击率（CTR）-&amp;gt; 点击率预估   自动化  智能出价、智能制作广告、落地页等 自动广告实验   数据  平台汇集手机用户的哪些数据用于广告的投放   互动性  互动广告是未来的一种趋势，比如微信和YouTube的广告。通过正反馈和负反馈，来不断完善广告系统。    广告提升营收方式</description>
            <content type="html"><![CDATA[<p><strong>互联网广告分类</strong></p>
<ul>
<li>社交广告
<ul>
<li>QQ、微信</li>
</ul>
</li>
<li>搜索广告
<ul>
<li>百度、Google</li>
</ul>
</li>
<li>媒体广告
<ul>
<li>抖音、今日头条</li>
</ul>
</li>
</ul>
<p><strong>广告计费方式</strong></p>
<ul>
<li>CPA（每行动成本，Cost Per Action）
<ul>
<li>指按广告投放实际效果，即按回应的有效问卷或定单来计费，而不限广告投放量。CPA广告是网络中最常见的一种广告形式，当用户点击某个网站上的CPA广告后，这个站的站长就会获得相应的收入。</li>
</ul>
</li>
<li>CPS（每销售成本，Cost Per Sale）
<ul>
<li>广告是网络广告的一种，广告主为规避广告费用风险，按照广告点击之后产生的实际销售笔数付给广告站点销售提成费用。</li>
</ul>
</li>
<li>CPC（每点击成本，Cost Per Click）
<ul>
<li>以每点击一次计费。这样的方法加上点击率限制可以加强作弊的难度，网民的每一次点击就会为广告主带来真实的流量或是潜在的消费者，是网络比较成熟的国家常见的收费方式之一。</li>
<li>当前流行的广告系统主流的二价收费的方式。</li>
</ul>
</li>
<li>CPD（按天收费 ，Cost Per Day）
<ul>
<li>是广告合作的一种常见方式，相比当前比较流行的CPS，优势在于对合作的基础条件没有过高要求，容易促成双方合作；劣势在于其在长期合作中，不如CPS形式实时有效。</li>
</ul>
</li>
<li>CPM（千人成本，Cost Per Mille）
<ul>
<li>是一种媒体或媒体排期表（SCHEDULING）送达1000人或”家庭”的成本计算单位。千人成本并非是广告主衡量媒体的唯一标准，只是为了对不同媒体进行衡量不得已而制定的一个相对指标。表现形式就是比如你在网站上投放了一个广告，然后有人打开你的网站看到了这个广告，那么就可以给您计费，也就是按照展示量给佣金。</li>
</ul>
</li>
<li>CPE（每参与成本，Cost Per Engagement）
<ul>
<li>旨在评估用户与品牌之间参与程度的价值。多应用于社交媒体，例如链接点击、喜欢、转发和 “@回复” 等等。另外 CPE 也指用户浏览过广告后，在一定时间内（如一周）与品牌进行的互动。</li>
</ul>
</li>
<li>eCPM (Effective Cost Per Mille)
<ul>
<li>每一千次展示可以获得的广告收入。</li>
<li>当前流行的广告系统主流的一种竞价方式。</li>
</ul>
</li>
<li>oCPA (Optimized Cost Per Action)
<ul>
<li>CPA的模式下是按照每转化一次进行收费，oCPA可以理解为在更为精准的投放模式下（特定某一群体），使得转化率更高，即与CPA相比更高的性价比以及转化率。</li>
</ul>
</li>
<li>oCPM (Optimized Cost Per Mille)
<ul>
<li>CPM的模式下是按照每1000曝光进行收费，oCPM可以理解为采用更精准的点击率和转化率预估机制，将广告展现给最容易产生转化的用户，在获取流量的同时，提高转化率、降低转化成本，跑量提速更快。</li>
</ul>
</li>
<li>一种比较有趣的阐述方式
<ul>
<li><a href="http://news.jstv.com/a/20170824/1503586851467.shtml">details</a></li>
</ul>
</li>
</ul>
<p><strong>广告投放机制</strong>
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0052.jpg" alt=""></p>
<ul>
<li>频次控制
<ul>
<li>根据平台不同，广告的频次不同。比如微信一天只有两条广告，而头条会有更多。</li>
</ul>
</li>
<li>原生广告
<ul>
<li>让广告看起来不像广告，成为内容的一部分。</li>
</ul>
</li>
<li>竞价
<ul>
<li>平台根据用户画像，筛选出适合投放的几种广告，并依靠竞价系统来进行选择。</li>
<li>竞价系统还会结合点击率（CTR）-&gt; 点击率预估</li>
</ul>
</li>
<li>自动化
<ul>
<li>智能出价、智能制作广告、落地页等</li>
<li>自动广告实验</li>
</ul>
</li>
<li>数据
<ul>
<li>平台汇集手机用户的哪些数据用于广告的投放</li>
</ul>
</li>
<li>互动性
<ul>
<li>互动广告是未来的一种趋势，比如微信和YouTube的广告。通过正反馈和负反馈，来不断完善广告系统。</li>
</ul>
</li>
</ul>
<p><strong>广告提升营收方式</strong></p>
<ul>
<li>提高活跃用户数</li>
<li>提高商业流量比例
<ul>
<li>按照横、纵连个纬度来划分
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/JdZjnAO0OHRaIzpEhVxW.png" alt=""></li>
</ul>
</li>
<li>提升人均广告展示数
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/mOPibyfGuovwsGxeqaJV.png" alt="">
<ul>
<li>必须满足D1 (页面停留时长) &gt; T1（填充时长） + T2（加载时长）</li>
<li>想要用户看到更多的广告，可以缩短广告准备时间（T1+T2），延长页面停留时间（D1）
<ul>
<li>例如，视频平台常用这种方式提前加载好广告</li>
</ul>
</li>
<li>方法
<ul>
<li>构建产品内容体系
<ul>
<li>利用对用户有价值的内容吸引用户</li>
<li>让用户进入一种漫游状态（投入时间但没有聚焦在某个特定行为上的状态）
<ul>
<li>例如，刷抖音，逛淘宝</li>
</ul>
</li>
</ul>
</li>
<li>拓展使用场景
<ul>
<li>挖掘周边需求
<ul>
<li>例如，饿了么前期只是做外卖，后来有了医疗等服务，开辟了新的广告接口</li>
</ul>
</li>
<li>与其他产品/服务联合，增加产品应用场景</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>提高广告点击率
<ul>
<li>优化广告形式
<ul>
<li>原生广告</li>
</ul>
</li>
<li>优化广告展示逻辑
<ul>
<li>利用数据管理平台（DMP），结合不同维度的数据，最终达到互联网广告的千人千面</li>
</ul>
</li>
<li>等价交换广告价值
<ul>
<li>例如，看一次广告就可以节省一些金币</li>
</ul>
</li>
</ul>
</li>
<li>提高单次点击广告价格
<ul>
<li>深入了解平台计价规则</li>
<li>A/B测试
<ul>
<li>试验哪个位置比较适合广告接入等</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>CRM (Customer Relationship Management)</strong></p>
<ul>
<li>针对不同广告平台、渠道以及活动节点进行统一管控
<ul>
<li>例如，一拨人负责Google AD，一拨人负责ADS Manager。虽然同是投放广告，但是彼此之间的交流有限，相互之间成功或者失败的案例不能及时分享，上级领导也无法通过对比两个渠道的各节点ROI，调整推广投放的策略。</li>
</ul>
</li>
<li>据企业的诉求搭建排重归因的机制
<ul>
<li>避免一笔订单二次收费，判断到底是哪个平台的推广促成了一笔交易。</li>
</ul>
</li>
<li>丰富用户画像
<ul>
<li>一般CRM是给用户打标签，而广告CRM是给广告本身打标签。个人理解，这里应该指的是一种用户画像不断精准的过程，一种良性循环。</li>
</ul>
</li>
<li>如何搭建
<ul>
<li>找准定位，任何产品都不例外
<ul>
<li>找准广告业务</li>
<li>确立系统边界，整合资源</li>
</ul>
</li>
<li>找准需求（需求池）
<ul>
<li>业务支撑
<ul>
<li>业务迁移至线上，打造完整流程链路</li>
</ul>
</li>
<li>精细运营
<ul>
<li>开辟业务新流程，拆分且管控各个工作节点</li>
</ul>
</li>
<li>智慧管理
<ul>
<li>搭建数据驱动机制，自动化推荐</li>
</ul>
</li>
</ul>
</li>
<li>阶段目标的补充</li>
</ul>
</li>
</ul>
<p><strong>CMS (Content Management System)</strong></p>
<ul>
<li>后台业务子系统管理（管理优先：内容管理）
<ul>
<li>类似于零件生产环节，数据库的搭建</li>
</ul>
</li>
<li>Portal系统（表现优先：模板管理）
<ul>
<li>类似于产品组装，连接前后台</li>
</ul>
</li>
<li>前台发布（效率优先：发布管理）
<ul>
<li>分发代理，最终导向用户浏览器或者网页搜索系统</li>
</ul>
</li>
<li>分类
<ul>
<li>框架型
<ul>
<li>不包含实现，只提供底层框架，需要二次开发</li>
</ul>
</li>
<li>应用型
<ul>
<li>一个面向某种子功能的具体工具</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>ADX (Ad Exchange)</strong></p>
<ul>
<li>连接DSP (Demand Side Platform)和SSP (Supply Side Platform)</li>
<li>通过DSP的流量，SSP可以获取目标客户</li>
<li>由于ADX需要大量的用户数据支持，所以现阶段的运营商都是一些比较大的互联网企业
<ul>
<li>例如，Alibaba、Tencent、RightMedia（Yahoo）、DoubleClick（Google）</li>
</ul>
</li>
</ul>
<p><strong>BB Part</strong></p>
<p>在广告领域，普遍认为“广告费会浪费一半，但是浪费在哪一半不得而知”。广告领域一直在追求一件事件，就是将流量变现。在互联网发展之前，主要的流量都集中在电视、广播等。所以这些就会成为广告投放的主要场所。但传统广告存在的问题是广告形式“千人一面”，而互联网广告依靠大数据实现对用户分类，可以达到“千人千面”的精准投放。这样一来，不仅节约了广告主的投入成本，而且可以将广告回报最大化。</p>
<p>但现如今的流量基本被电商、社交以及短视频等平台垄断，所以广告的投放场景也由电视、广播转到了互联网平台。互联网广告主要依靠推荐算法、精准投放以及内容来实现，前两者属于比较高效，极具性价比的方式。而内容会不会成为最后的趋势不得而知，但内容对于品牌的建立一定是最有效的方式。如果广告主为了追求效果（营销），这种方式就不再适用，但足够好的内容也是可以弥补的。所以在一定程度上，个人认为广告可以分为品牌广告和效果广告（营销），前者内容更为有效，后者推荐算法和精准投放更能在短期内见效。</p>
<p>一直以来有一个疑问，厂商投了广告，应该会造成商品成本的增加，进而提高售价。但看了一下数据，发现事实正好相反，不投入广告的品牌更容易被遗忘（遗忘曲线，比如健力宝案例），且价格更高。事实上，广告会促进用户增长，进而推动商品规模的扩大，从而使得商品成本减少，最终使得售价降低。其实说到底，还是吸引流量，最终利用流量驱动扩大生产降低成本，提升利润。广告除了可以降低商品售价，还可以让用户免费使用一些产品，例如Facebook和Google。同时，还可以降低用户的选择成本。例如，当我们去商店买洗发水，如果没有广告，我们会看成分表，选择一个去屑效果好的。但如今通过海飞丝“去屑实力派”的slogan，我们可以很容易作出选择。</p>
]]></content>
        </item>
        
        <item>
            <title>To C Introductory Lecture of Tencent Lighthouse Program</title>
            <link>https://www.marshalgao.com/to-c-introductory-lecture-of-tencent-lighthouse-program/</link>
            <pubDate>Tue, 10 Nov 2020 13:50:47 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/to-c-introductory-lecture-of-tencent-lighthouse-program/</guid>
            <description>产品生产的过程 产品想法
 面临的挑战  真实需求挑战 市场竞争挑战  竞品分析   可行性挑战  技术 资源 政策法规     应对挑战  产品分析  用户研究：了解用户真实需求 竞品分析：了解市场重的竞品   虚拟成本  团队能力 资源配置   产品定位  结合产品分析和虚拟成本   产品规划  结合多方因素的最终导向      用户研究
 产品需求与用户需求  产品需求：功能解决方案（产品的功能） 用户需求：想要达到的目的（功能背后的原因） 不同用户的价值观、行为模式不同，对产品的需求存在差异 example &amp;ndash; 短视频分享  社交型用户（基本特征） 兴趣型用户（兴趣纬度） 媒体型用户（商业维度）     基本步骤  用研目标  产品经理提出 明确调研目标   定性调研  明确用户群、特征和需求点 观察法、日志法、访谈法   定量验证  验证定性调研的结论   结论整理  可用的指导     基本模版    目标用户群 主要特征 主要需求点 主要功能     用户群1      用户群2      &amp;hellip;&amp;hellip;         市场分析</description>
            <content type="html"><![CDATA[<p><strong>产品生产的过程</strong>
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0046.jpg" alt=""></p>
<p><strong>产品想法</strong></p>
<ul>
<li>面临的挑战
<ul>
<li>真实需求挑战</li>
<li>市场竞争挑战
<ul>
<li>竞品分析</li>
</ul>
</li>
<li>可行性挑战
<ul>
<li>技术</li>
<li>资源</li>
<li>政策法规</li>
</ul>
</li>
</ul>
</li>
<li>应对挑战
<ul>
<li>产品分析
<ul>
<li>用户研究：了解用户真实需求</li>
<li>竞品分析：了解市场重的竞品</li>
</ul>
</li>
<li>虚拟成本
<ul>
<li>团队能力</li>
<li>资源配置</li>
</ul>
</li>
<li>产品定位
<ul>
<li>结合产品分析和虚拟成本</li>
</ul>
</li>
<li>产品规划
<ul>
<li>结合多方因素的最终导向</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>用户研究</strong></p>
<ul>
<li>产品需求与用户需求
<ul>
<li>产品需求：功能解决方案（产品的功能）</li>
<li>用户需求：想要达到的目的（功能背后的原因）</li>
<li>不同用户的价值观、行为模式不同，对产品的需求存在差异</li>
<li>example &ndash; 短视频分享
<ul>
<li>社交型用户（基本特征）</li>
<li>兴趣型用户（兴趣纬度）</li>
<li>媒体型用户（商业维度）</li>
</ul>
</li>
</ul>
</li>
<li>基本步骤
<ul>
<li>用研目标
<ul>
<li>产品经理提出</li>
<li>明确调研目标</li>
</ul>
</li>
<li>定性调研
<ul>
<li>明确用户群、特征和需求点</li>
<li>观察法、日志法、访谈法</li>
</ul>
</li>
<li>定量验证
<ul>
<li>验证定性调研的结论</li>
</ul>
</li>
<li>结论整理
<ul>
<li>可用的指导</li>
</ul>
</li>
</ul>
</li>
<li>基本模版
<table>
<thead>
<tr>
<th style="text-align:center">目标用户群</th>
<th style="text-align:center">主要特征</th>
<th style="text-align:center">主要需求点</th>
<th style="text-align:center">主要功能</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">用户群1</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:center">用户群2</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:center">&hellip;&hellip;</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</li>
</ul>
<p><strong>市场分析</strong></p>
<ul>
<li>宏观环境
<ul>
<li>政策法律</li>
<li>经济要素</li>
<li>社会与文化</li>
<li>科技要素</li>
</ul>
</li>
<li>行业趋势
<ul>
<li>行业概览</li>
<li>子行业细分</li>
<li>未来趋势</li>
</ul>
</li>
<li>竞品格局
<ul>
<li>竞品定位</li>
<li>差异与优势</li>
<li>未来趋势</li>
<li>方法
<ul>
<li>找竞品
<ul>
<li>习惯与方法</li>
</ul>
</li>
<li>看竞品
<ul>
<li>看定位、概念</li>
<li>看亮点、差异</li>
<li>看数据、反馈</li>
</ul>
</li>
<li>利用竞品树对市场进行细分
<ul>
<li>自身产品所在细分市场各个竞品为直接竞品</li>
<li>其他细分市场各个竞品为间接竞品或潜在竞品</li>
<li>example &ndash; 竞品树
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0047.jpg" alt=""></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>基本模版
<table>
<thead>
<tr>
<th style="text-align:center">细分市场</th>
<th style="text-align:center">竞品名称</th>
<th style="text-align:center">定位</th>
<th style="text-align:center">亮点/优势</th>
<th style="text-align:center">未来趋势</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">细分市场A</td>
<td style="text-align:center">竞品1</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:center">细分市场B</td>
<td style="text-align:center">竞品2</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:center">&hellip;&hellip;</td>
<td style="text-align:center">&hellip;&hellip;</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</li>
</ul>
<p><strong>产品定位</strong></p>
<ul>
<li>SWOT分析</li>
<li>通过分析不断明确产品的定位
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0048.jpg" alt=""></li>
</ul>
<p><strong>产品规划</strong></p>
<ul>
<li>产品定位与产品规划
<ul>
<li>定位：是根据用户需求、市场机会和团队能力选择的切入点</li>
<li>规划：是朝着产品长期愿景前进选择的阶段性目标和发展路径
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/newIMG_0049.jpg" alt=""></li>
</ul>
</li>
<li>方法 (GPA)
<ul>
<li>先设立每个阶段的目标，再围绕每个阶段的目标做考虑需要的功能和优先级
<img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0050.jpg" alt=""></li>
<li>阶段目标的设定
<ul>
<li>阶段目标符合产品定位和市场环境</li>
<li>目标的定义应该是可实现、可评估的</li>
<li>当前阶段的目标最为明确</li>
<li>后一阶段的目标，是基于前一段目标的达成后猜想</li>
<li>目标可能会随着团队内部、外部环境的改变而变化</li>
</ul>
</li>
<li>可选方案与优先级评估的思考方向
<ul>
<li>预估的效果</li>
<li>当前资源的限制</li>
</ul>
</li>
</ul>
</li>
<li>基本模版
<table>
<thead>
<tr>
<th style="text-align:center">阶段目标</th>
<th style="text-align:center">主要功能点</th>
<th style="text-align:center">优先级</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">阶段一目标名称</td>
<td style="text-align:center">功能点1</td>
<td style="text-align:center">P0</td>
</tr>
<tr>
<td style="text-align:center">阶段二目标名称</td>
<td style="text-align:center">功能点2</td>
<td style="text-align:center">P1</td>
</tr>
<tr>
<td style="text-align:center">&hellip;&hellip;</td>
<td style="text-align:center">&hellip;&hellip;</td>
<td style="text-align:center">&hellip;&hellip;</td>
</tr>
</tbody>
</table>
</li>
</ul>
<p><strong>BB Part</strong></p>
<p>当发现的需求领域没有竞品，伪需求的概率非常大。当一个需求领域的解决方案或者是产品处于一个百花齐放的状态时，才是一个真正的风口。</p>
<p><strong>推荐阅读</strong></p>
<ul>
<li>《Don&rsquo;t make me think》</li>
<li>《101 Design Methods》</li>
<li>《触动人心：设计优秀的iPhone应用》</li>
<li>《简约至上 交互式设计四策略》</li>
<li>《用户体验要素：以用户为中心的产品设计》</li>
<li>《简单统计学》</li>
<li>《数据驱动设计——A/B测试提升用户体验》</li>
<li>《别拿相关当因果》</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Axure Attachments</title>
            <link>https://www.marshalgao.com/axure-attachments/</link>
            <pubDate>Sat, 07 Nov 2020 00:25:03 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/axure-attachments/</guid>
            <description>各事件简要介绍
各动作简要介绍</description>
            <content type="html"><![CDATA[<p><strong>各事件简要介绍</strong></p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_00391.JPG" alt=""></p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0040.JPG" alt=""></p>
<p><strong>各动作简要介绍</strong></p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0041.JPG" alt=""></p>
<p><img src="https://raw.githubusercontent.com/MarshalGao/image_hosting/master/hugo_images/IMG_0042.JPG" alt=""></p>
]]></content>
        </item>
        
        <item>
            <title>LeetCode[1] Two Sum</title>
            <link>https://www.marshalgao.com/leetcode1-two-sum/</link>
            <pubDate>Wed, 07 Oct 2020 18:24:14 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/leetcode1-two-sum/</guid>
            <description>Question Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1 Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1].</description>
            <content type="html"><![CDATA[<h2 id="question">Question</h2>

<p align="justify">Given an array of integers <b>nums</b> and an integer <b>target</b>, return <i>indices of the two numbers such that they add up to <b>target</b></i>.</p>

<p align="justify">You may assume that each input would have <strong><i>exactly</i> one solution</strong>, and you may not use the <i>same</i> element twice.</p>

<p>You can return the answer in any order.</p>

<h2 id="example-1">Example 1</h2>
<pre><code>Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].</code></pre>
<h2 id="example-2">Example 2</h2>
<pre><code>Input: nums = [3,2,4], target = 6
Output: [1,2] </code></pre>
<h2 id="example-3">Example 3</h2>
<pre><code>Input: nums = [3,3], target = 6
Output: [0,1]</code></pre>
<h2 id="constraints">Constraints</h2>

<ul>
<li>2 <span  class="math">\(\leq\)</span> nums.length <span  class="math">\(\leq 10^5\)</span></li>
<li><span  class="math">\(-10^9 \leq\)</span> nums[i] <span  class="math">\(\leq 10^9\)</span></li>
<li><span  class="math">\(-10^9 \leq\)</span> target <span  class="math">\(\leq 10^9\)</span></li>
<li><strong>Only one valid answer exists.</strong></li>
</ul>

<h2 id="my-interesting-code">My Interesting Code</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">Solution</span>(object):
    <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">twoSum</span>(self, nums, target):
        <span style="color:#e6db74">&#34;&#34;&#34;
</span><span style="color:#e6db74">        :type nums: List[int]
</span><span style="color:#e6db74">        :type target: int
</span><span style="color:#e6db74">        :rtype: List[int]
</span><span style="color:#e6db74">        &#34;&#34;&#34;</span>
        <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> nums:
            temp <span style="color:#f92672">=</span> nums[:nums<span style="color:#f92672">.</span>index(i):] <span style="color:#f92672">+</span> nums[nums<span style="color:#f92672">.</span>index(i)<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>::]
            <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> temp:
                <span style="color:#66d9ef">if</span> i <span style="color:#f92672">+</span> j <span style="color:#f92672">==</span> target:
                    result_1 <span style="color:#f92672">=</span> nums<span style="color:#f92672">.</span>index(i)
                    nums<span style="color:#f92672">.</span>remove(i)
                    result_2 <span style="color:#f92672">=</span> nums<span style="color:#f92672">.</span>index(j) <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>
                    <span style="color:#66d9ef">return</span> list((result_1, result_2))</code></pre></div>
<h2 id="my-perspective-chinese-only">My Perspective (Chinese Only)</h2>

<p align="justify">之所以是interesting的代码，是因为个人擅长使用暴力拆解。所以在LeetCode的所有习题中，在保证通过的情况下，个人会优先考虑暴力拆解。暴力拆解的优势在于代码易于理解，但是其时间复杂度和空间复杂度较高。</p>

<p align="justify">首先，我们先依次遍历列表nums。以第一个Example为例，当我们取出数字2后，为了寻找符合target的元素，我们只需遍历除了数字2以外的元素即可。那么如何获取除了数字2以外的元素？Python自带的切片(split)可以很好的解决这个问题。所以，下面先来学习一下切片。</p>

<p align="justify">一个完整的切片表达式包含两个“:”，用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时，默认第三个参数step=1；当一个“:”也没有时，start_index=end_index，表示切取start_index指定的那个元素。</p>

<p align="justify">step：正负数均可，其绝对值大小决定了切取数据时的“步长”，而正负号决定了“切取方向”，正表示“从左往右”取值，负表示“从右往左”取值。当step省略时，默认为1，即从左往右以步长1取值。</p>

<p align="justify">start_index：表示起始索引（包含该索引对应值）；该参数省略时，表示从对象“端点”开始取值，至于是从“起点”还是从“终点”开始，则由step参数的正负决定，step为正从“起点”开始，为负从“终点”开始。</p>

<p align="justify">end_index：表示终止索引（不包含该索引对应值）；该参数省略时，表示一直取到数据“端点”，至于是到“起点”还是到“终点”，同样由step参数的正负决定，step为正时直到“终点”，为负时直到“起点”。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python">nums <span style="color:#f92672">=</span> [<span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">3</span>, <span style="color:#ae81ff">4</span>]
<span style="color:#f92672">&gt;&gt;</span>nums[<span style="color:#ae81ff">0</span>: <span style="color:#ae81ff">2</span>:] <span style="color:#f92672">=</span> [<span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">2</span>]
<span style="color:#f92672">&gt;&gt;</span>nums[<span style="color:#ae81ff">1</span>: <span style="color:#ae81ff">3</span>: <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>] <span style="color:#f92672">=</span> []
<span style="color:#f92672">&gt;&gt;</span>nums[: <span style="color:#ae81ff">2</span>: <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>] <span style="color:#f92672">=</span> [<span style="color:#ae81ff">4</span>]
<span style="color:#f92672">&gt;&gt;</span>nums[::] <span style="color:#f92672">=</span> [<span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">3</span>, <span style="color:#ae81ff">4</span>]
<span style="color:#f92672">&gt;&gt;</span>nums[::<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>] <span style="color:#f92672">=</span> [<span style="color:#ae81ff">4</span>, <span style="color:#ae81ff">3</span>, <span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">1</span>]</code></pre></div>
<p align="justify">学习好切片后，我们接着以第一个Example为例说明。当取出数字2后，利用切片，将nums中除了数字2以外的元素全部取出，组成新的列表temp。将temp中的每一个元素与数字2相加，如果结果等于target，便将两个元素的索引返回。注意，这里的元素索引应为nums中的元素索引值。特别地，在返回list时，小括号需用两层进行嵌套，否则会造成结果错误。</p>

<p align="justify">本题所采用的暴力拆解是一种易于理解，基于穷举并完全遍历的思想，会造成一定的时间和空间浪费，但由于Python的切片是基于for循环的一种优化，所以代码效率相较于纯for循环来说，要好很多。</p>
]]></content>
        </item>
        
        <item>
            <title>Quarantine Diary</title>
            <link>https://www.marshalgao.com/quarantine-diary/</link>
            <pubDate>Wed, 02 Sep 2020 14:12:35 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/quarantine-diary/</guid>
            <description>   疫情期间赴港上学隔离14天的生活即将结束，刚刚上完第一节课，视频传传好，我要冲了，努力学习！ 再次感谢小刘同学提供的BGM，期望以后可以持续输出！ </description>
            <content type="html"><![CDATA[<div class="iframe-container">
    <iframe src="https://player.bilibili.com/player.html?aid=839485025&bvid=BV1S54y127AP&cid=231463415&page=1" allowfullscreen> </iframe>
</div>
<hr>
<h5 id="疫情期间赴港上学隔离14天的生活即将结束刚刚上完第一节课视频传传好我要冲了努力学习">疫情期间赴港上学隔离14天的生活即将结束，刚刚上完第一节课，视频传传好，我要冲了，努力学习！</h5>
<h5 id="再次感谢小刘同学提供的bgm期望以后可以持续输出">再次感谢小刘同学提供的BGM，期望以后可以持续输出！</h5>
]]></content>
        </item>
        
        <item>
            <title>New Arrival</title>
            <link>https://www.marshalgao.com/new-arrival/</link>
            <pubDate>Sun, 23 Aug 2020 14:44:52 +0800</pubDate>
            
            <guid>https://www.marshalgao.com/new-arrival/</guid>
            <description>   疫情期间赴香港隔离，一路上新奇拍拍拍。要开始读书了，冲！ 特别感谢小刘同学提供的BGM，在这里夸赞一下她的歌品！ </description>
            <content type="html"><![CDATA[<div class="iframe-container">
    <iframe src="https://player.bilibili.com/player.html?aid=499308002&bvid=BV1QK411T7CR&cid=227836652&page=1" allowfullscreen> </iframe>
</div>
<hr>
<h5 id="疫情期间赴香港隔离一路上新奇拍拍拍要开始读书了冲">疫情期间赴香港隔离，一路上新奇拍拍拍。要开始读书了，冲！</h5>
<h5 id="特别感谢小刘同学提供的bgm在这里夸赞一下她的歌品">特别感谢小刘同学提供的BGM，在这里夸赞一下她的歌品！</h5>
]]></content>
        </item>
        
    </channel>
</rss>
