<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: minddd64</title>
    <description>The latest articles on DEV Community by minddd64 (@minddd64).</description>
    <link>https://dev.to/minddd64</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1431453%2F581a333b-19fe-4d01-af71-c7a8965be6d6.JPG</url>
      <title>DEV Community: minddd64</title>
      <link>https://dev.to/minddd64</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/minddd64"/>
    <language>en</language>
    <item>
      <title>Understanding Search Functionality</title>
      <dc:creator>minddd64</dc:creator>
      <pubDate>Fri, 19 Apr 2024 11:59:17 +0000</pubDate>
      <link>https://dev.to/minddd64/understanding-search-functionality-58bn</link>
      <guid>https://dev.to/minddd64/understanding-search-functionality-58bn</guid>
      <description>&lt;h2&gt;
  
  
  Questions before we create the function
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why does this function make the product better? &lt;/li&gt;
&lt;li&gt;How can we measure the effect of the function quantitatively? &lt;/li&gt;
&lt;li&gt;How long does it take to create the function&lt;/li&gt;
&lt;li&gt;Does this function make the product too complicated? &lt;/li&gt;
&lt;li&gt;How dangerous is the function? &lt;/li&gt;
&lt;li&gt;How innovative is the function? &lt;/li&gt;
&lt;li&gt;Is it aligned with what users want? &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Hypothesis that we need to check
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Do users use the search function a lot? Among the numerous functions used by users, how commonly is the search function?&lt;/li&gt;
&lt;li&gt;How often do users use the search function in one session?
(It might be a problem if they use it too often or too rarely) &lt;/li&gt;
&lt;li&gt;How much do results clicks occur after searching?&lt;/li&gt;
&lt;li&gt;where is the results that is clicked after a search? &lt;/li&gt;
&lt;li&gt;The more users search, the more click they do? &lt;/li&gt;
&lt;li&gt;What is the retention rate of the search function users? &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary of problem
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Explore whether the search function is necessary&lt;/li&gt;
&lt;li&gt;Which part should be improved and how &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Data Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Percentage of search function usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('week', z.session_start) AS week,
       COUNT(*) AS sessions, 
       COUNT(CASE WHEN z.autocompletes &amp;gt; 0 THEN z.session ELSE NULL END) AS with_autocompletes,
       COUNT(CASE WHEN z.runs &amp;gt; 0 THEN z.session ELSE NULL END) AS with_runs
FROM (
SELECT x.session_start,
       x.session,
       x.user_id, 
       COUNT(CASE WHEN x.event_name = 'search_autocomplete' THEN x.user_id ELSE NULL END) AS autocompletes,
       COUNT(CASE WHEN x.event_name = 'search_run' THEN x.user_id ELSE NULL END) AS runs,
       COUNT(CASE WHEN x.event_name LIKE 'search_click_%' THEN x.user_id ELSE NULL END) AS clicks
FROM (
SELECT e.*,
       session.session,
       session.session_start
FROM tutorial.yammer_events e
LEFT JOIN (
SELECT user_id, session, MIN(occurred_at) AS session_start, MAX(occurred_at) AS session_end
FROM(

SELECT bounds.*,
       CASE WHEN last_event &amp;gt;= INTERVAL '10 MINUTE' THEN id
       WHEN last_event IS NULL THEN id 
       ELSE LAG(id, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) END AS session
FROM (
SELECT user_id, event_type, event_name, occurred_at, 
       occurred_at - LAG(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS last_event,
       LEAD(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) - occurred_at AS next_event,
       ROW_NUMBER() OVER() AS id
FROM tutorial.yammer_events e
WHERE e.event_type = 'engagement'
ORDER BY user_id, occurred_at
) bounds
WHERE last_event &amp;gt;= INTERVAL '10 MINUTE' OR
      next_event &amp;gt;= INTERVAL '10 MINUTE' OR
      last_event IS NULL OR 
      next_event IS NULL) final
GROUP BY user_id, session) session
ON e.user_id = session.user_id AND
   e.occurred_at &amp;gt;= session.session_start AND
   e.occurred_at &amp;lt;= session.session_end
WHERE e.event_type = 'engagement') x
GROUP BY x.session_start, x.session, x.user_id) z
GROUP BY week
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysodt8s6qif2neehrsac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysodt8s6qif2neehrsac.png" alt="Image description" width="489" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwgn712b95v08dpicexz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwgn712b95v08dpicexz.png" alt="Image description" width="455" height="282"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. The number of sessions with autocompletes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT autocompletes, COUNT(*) AS sessions
FROM (
SELECT x.session_start,
       x.session,
       x.user_id, 
       COUNT(CASE WHEN x.event_name = 'search_autocomplete' THEN x.user_id ELSE NULL END) AS autocompletes,
       COUNT(CASE WHEN x.event_name = 'search_run' THEN x.user_id ELSE NULL END) AS runs,
       COUNT(CASE WHEN x.event_name LIKE 'search_click_%' THEN x.user_id ELSE NULL END) AS clicks
FROM (
SELECT e.*,
       session.session,
       session.session_start
FROM tutorial.yammer_events e
LEFT JOIN (
SELECT user_id, session, MIN(occurred_at) AS session_start, MAX(occurred_at) AS session_end
FROM(

SELECT bounds.*,
       CASE WHEN last_event &amp;gt;= INTERVAL '10 MINUTE' THEN id
       WHEN last_event IS NULL THEN id 
       ELSE LAG(id, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) END AS session
FROM (
SELECT user_id, event_type, event_name, occurred_at, 
       occurred_at - LAG(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS last_event,
       LEAD(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) - occurred_at AS next_event,
       ROW_NUMBER() OVER() AS id
FROM tutorial.yammer_events e
WHERE e.event_type = 'engagement'
ORDER BY user_id, occurred_at
) bounds
WHERE last_event &amp;gt;= INTERVAL '10 MINUTE' OR
      next_event &amp;gt;= INTERVAL '10 MINUTE' OR
      last_event IS NULL OR 
      next_event IS NULL) final
GROUP BY user_id, session) session
ON e.user_id = session.user_id AND
   e.occurred_at &amp;gt;= session.session_start AND
   e.occurred_at &amp;lt;= session.session_end
WHERE e.event_type = 'engagement') x
GROUP BY x.session_start, x.session, x.user_id) z
GROUP BY autocompletes

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fip9ng07mz8oi4hzk13sx.png" alt="Image description" width="430" height="266"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3. The number of sessions with full search
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT runs, COUNT(*) AS sessions
FROM (
SELECT x.session_start,
       x.session,
       x.user_id, 
       COUNT(CASE WHEN x.event_name = 'search_autocomplete' THEN x.user_id ELSE NULL END) AS autocompletes,
       COUNT(CASE WHEN x.event_name = 'search_run' THEN x.user_id ELSE NULL END) AS runs,
       COUNT(CASE WHEN x.event_name LIKE 'search_click_%' THEN x.user_id ELSE NULL END) AS clicks
FROM (
SELECT e.*,
       session.session,
       session.session_start
FROM tutorial.yammer_events e
LEFT JOIN (
SELECT user_id, session, MIN(occurred_at) AS session_start, MAX(occurred_at) AS session_end
FROM(

SELECT bounds.*,
       CASE WHEN last_event &amp;gt;= INTERVAL '10 MINUTE' THEN id
       WHEN last_event IS NULL THEN id 
       ELSE LAG(id, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) END AS session
FROM (
SELECT user_id, event_type, event_name, occurred_at, 
       occurred_at - LAG(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS last_event,
       LEAD(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) - occurred_at AS next_event,
       ROW_NUMBER() OVER() AS id
FROM tutorial.yammer_events e
WHERE e.event_type = 'engagement'
ORDER BY user_id, occurred_at
) bounds
WHERE last_event &amp;gt;= INTERVAL '10 MINUTE' OR
      next_event &amp;gt;= INTERVAL '10 MINUTE' OR
      last_event IS NULL OR 
      next_event IS NULL) final
GROUP BY user_id, session) session
ON e.user_id = session.user_id AND
   e.occurred_at &amp;gt;= session.session_start AND
   e.occurred_at &amp;lt;= session.session_end
WHERE e.event_type = 'engagement') x
GROUP BY x.session_start, x.session, x.user_id) z
GROUP BY runs

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffz46dgri10oajh5ko975.png" alt="Image description" width="430" height="266"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4. Distribution of the clickthrough after full search
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT clicks, COUNT(*)
FROM (
SELECT x.session_start,
       x.session,
       x.user_id, 
       COUNT(CASE WHEN x.event_name = 'search_autocomplete' THEN x.user_id ELSE NULL END) AS autocompletes,
       COUNT(CASE WHEN x.event_name = 'search_run' THEN x.user_id ELSE NULL END) AS runs,
       COUNT(CASE WHEN x.event_name LIKE 'search_click_%' THEN x.user_id ELSE NULL END) AS clicks
FROM (
SELECT e.*,
       session.session,
       session.session_start
FROM tutorial.yammer_events e
LEFT JOIN (
SELECT user_id, session, MIN(occurred_at) AS session_start, MAX(occurred_at) AS session_end
FROM(

SELECT bounds.*,
       CASE WHEN last_event &amp;gt;= INTERVAL '10 MINUTE' THEN id
       WHEN last_event IS NULL THEN id 
       ELSE LAG(id, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) END AS session
FROM (
SELECT user_id, event_type, event_name, occurred_at, 
       occurred_at - LAG(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS last_event,
       LEAD(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) - occurred_at AS next_event,
       ROW_NUMBER() OVER() AS id
FROM tutorial.yammer_events e
WHERE e.event_type = 'engagement'
ORDER BY user_id, occurred_at
) bounds
WHERE last_event &amp;gt;= INTERVAL '10 MINUTE' OR
      next_event &amp;gt;= INTERVAL '10 MINUTE' OR
      last_event IS NULL OR 
      next_event IS NULL) final
GROUP BY user_id, session) session
ON e.user_id = session.user_id AND
   e.occurred_at &amp;gt;= session.session_start AND
   e.occurred_at &amp;lt;= session.session_end
WHERE e.event_type = 'engagement') x
GROUP BY x.session_start, x.session, x.user_id) z
WHERE runs &amp;gt; 0 
GROUP BY clicks

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegzefrawy9m3yhwzx3ie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegzefrawy9m3yhwzx3ie.png" alt="Image description" width="456" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After full search, zero clickthrough is more than half.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT runs, AVG(clicks) ::FLOAT AS average_clicks
FROM (
SELECT x.session_start,
       x.session,
       x.user_id, 
       COUNT(CASE WHEN x.event_name = 'search_autocomplete' THEN x.user_id ELSE NULL END) AS autocompletes,
       COUNT(CASE WHEN x.event_name = 'search_run' THEN x.user_id ELSE NULL END) AS runs,
       COUNT(CASE WHEN x.event_name LIKE 'search_click_%' THEN x.user_id ELSE NULL END) AS clicks
FROM (
SELECT e.*,
       session.session,
       session.session_start
FROM tutorial.yammer_events e
LEFT JOIN (
SELECT user_id, session, MIN(occurred_at) AS session_start, MAX(occurred_at) AS session_end
FROM(

SELECT bounds.*,
       CASE WHEN last_event &amp;gt;= INTERVAL '10 MINUTE' THEN id
       WHEN last_event IS NULL THEN id 
       ELSE LAG(id, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) END AS session
FROM (
SELECT user_id, event_type, event_name, occurred_at, 
       occurred_at - LAG(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS last_event,
       LEAD(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) - occurred_at AS next_event,
       ROW_NUMBER() OVER() AS id
FROM tutorial.yammer_events e
WHERE e.event_type = 'engagement'
ORDER BY user_id, occurred_at
) bounds
WHERE last_event &amp;gt;= INTERVAL '10 MINUTE' OR
      next_event &amp;gt;= INTERVAL '10 MINUTE' OR
      last_event IS NULL OR 
      next_event IS NULL) final
GROUP BY user_id, session) session
ON e.user_id = session.user_id AND
   e.occurred_at &amp;gt;= session.session_start AND
   e.occurred_at &amp;lt;= session.session_end
WHERE e.event_type = 'engagement') x
GROUP BY x.session_start, x.session, x.user_id) z
WHERE runs &amp;gt; 0 
GROUP BY runs

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhsy5w04fsxus65ios0bg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhsy5w04fsxus65ios0bg.png" alt="Image description" width="456" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The more users search, the more they click.&lt;/li&gt;
&lt;li&gt;Above 13 runs, the amount of sessions decreased -&amp;gt; not accurate&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. The order of clicked contents
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT event_name, COUNT(user_id)
FROM tutorial.yammer_events
WHERE event_name LIKE 'search_click_result_%'
GROUP BY event_name
ORDER BY event_name

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fki5qb7y3ovl2g60u0v9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fki5qb7y3ovl2g60u0v9p.png" alt="Image description" width="383" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The order of contents that users click is distributed.&lt;/li&gt;
&lt;li&gt;In chart 4, users who click only one result is 2.45%. It implies that it's not the matter of ranking, but the matter of results itself. &lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  6. Retention users
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT searches, COUNT(*) AS users
FROM (
SELECT user_id, COUNT(*) AS searches
FROM (
SELECT x.session_start,
       x.session,
       x.user_id, 
       COUNT(CASE WHEN x.event_name = 'search_autocomplete' THEN x.user_id ELSE NULL END) AS autocompletes,
       COUNT(CASE WHEN x.event_name = 'search_run' THEN x.user_id ELSE NULL END) AS runs,
       COUNT(CASE WHEN x.event_name LIKE 'search_click_%' THEN x.user_id ELSE NULL END) AS clicks
FROM (
SELECT e.*,
       session.session,
       session.session_start
FROM tutorial.yammer_events e
LEFT JOIN (
SELECT user_id, session, MIN(occurred_at) AS session_start, MAX(occurred_at) AS session_end
FROM(

SELECT bounds.*,
       CASE WHEN last_event &amp;gt;= INTERVAL '10 MINUTE' THEN id
       WHEN last_event IS NULL THEN id 
       ELSE LAG(id, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) END AS session
FROM (
SELECT user_id, event_type, event_name, occurred_at, 
       occurred_at - LAG(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS last_event,
       LEAD(occurred_at, 1) OVER (PARTITION BY user_id ORDER BY occurred_at) - occurred_at AS next_event,
       ROW_NUMBER() OVER() AS id
FROM tutorial.yammer_events e
WHERE e.event_type = 'engagement'
ORDER BY user_id, occurred_at
) bounds
WHERE last_event &amp;gt;= INTERVAL '10 MINUTE' OR
      next_event &amp;gt;= INTERVAL '10 MINUTE' OR
      last_event IS NULL OR 
      next_event IS NULL) final
GROUP BY user_id, session) session
ON e.user_id = session.user_id AND
   e.occurred_at &amp;gt;= session.session_start AND
   e.occurred_at &amp;lt;= session.session_end
WHERE e.event_type = 'engagement') x
GROUP BY x.session_start, x.session, x.user_id) z
WHERE z.runs &amp;gt; 0
GROUP BY user_id) z 
GROUP BY searches
ORDER BY searches
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6q9jfuatliu5glvgrkji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6q9jfuatliu5glvgrkji.png" alt="Image description" width="153" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsbwfzso3b6l4j1oszzm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsbwfzso3b6l4j1oszzm.png" alt="Image description" width="153" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Within a month after the first full search, 1,177 users used full search once more, and 428 users used it twice.&lt;/li&gt;
&lt;li&gt;Within a month after the first autocomplete, 1,239 users used autocomplete once more, and 1,003 users used it twice.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary of analysis
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Both autocomplete (222%) and full search(8%) are used in many sessions, so it's worthy to put more resources. &lt;/li&gt;
&lt;li&gt;88% of users search more than twice in full search.&lt;/li&gt;
&lt;li&gt;More than half of users don't click any result. &lt;/li&gt;
&lt;li&gt;After full search, people used to click several results not only one or two. &lt;/li&gt;
&lt;li&gt;The order of contents which users click is distributed. &lt;/li&gt;
&lt;li&gt;It implies that users can't get the results they want easily. &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Review
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If there are not enough data, it can distort the result (especially in ratio) &lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Investigating a drop in user engagement</title>
      <dc:creator>minddd64</dc:creator>
      <pubDate>Wed, 17 Apr 2024 13:11:44 +0000</pubDate>
      <link>https://dev.to/minddd64/investigating-a-drop-in-user-engagement-50l2</link>
      <guid>https://dev.to/minddd64/investigating-a-drop-in-user-engagement-50l2</guid>
      <description>&lt;h2&gt;
  
  
  Summary of the problem situation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;WAU (Weekly active users) is decreasing after 2014-08-04&lt;/li&gt;
&lt;li&gt;Not sure about the cause of the weekly decrease in active users
( In this project, Active Users are counted as logged in user.)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('week', occurred_at) AS week, 
COUNT(DISTINCT user_id) AS weekly_active_user
FROM tutorial.yammer_events
WHERE occurred_at BETWEEN '2014-04-28 00:00:00' AND '2014-08-23 23:59:59'
AND event_type = 'engagement' AND event_type = 'login'
GROUP BY week
ORDER BY week
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--trnjMdk---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/01db20e3-02c3-41b9-b528-634cff832317/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--trnjMdk---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/01db20e3-02c3-41b9-b528-634cff832317/image.png" alt="" width="458" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. New users
&lt;/h3&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('day', created_at) AS signup_date,
COUNT(user_id) AS signup_users,
COUNT(CASE WHEN activated_at IS NOT NULL THEN user_id ELSE NULL END) AS activted_users
FROM tutorial.yammer_users
WHERE created_at BETWEEN '2014-06-01 00:00:00' AND '2014-08-31 23:59:59'
GROUP BY signup_date
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--twbm6ZC2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/8d252e41-2060-4e47-9dc4-8f5887593b3e/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--twbm6ZC2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/8d252e41-2060-4e47-9dc4-8f5887593b3e/image.png" alt="" width="451" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('week', created_at) AS signup_date,
COUNT(user_id) AS signup_users,
COUNT(CASE WHEN activated_at IS NOT NULL THEN user_id ELSE NULL END) AS activted_users
FROM tutorial.yammer_users
WHERE created_at BETWEEN '2014-06-01 00:00:00' AND '2014-08-31 23:59:59'
GROUP BY signup_date
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8y78MFFe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/29e42b8e-bea6-4288-8ae4-b5db0c6ddaaa/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8y78MFFe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/29e42b8e-bea6-4288-8ae4-b5db0c6ddaaa/image.png" alt="" width="524" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At 2014-08-04 week, engagement decreased slightly &lt;/li&gt;
&lt;li&gt;After that, signup users and activated users both are recovered.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2.  User Cohort
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Retention chart analysis by user age cohort
&lt;/h4&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('week',z.occurred_at) AS "week",
       AVG(z.age_at_event) AS "Average age during week",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;gt; 70 THEN z.user_id ELSE NULL END) AS "10+ weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 70 AND z.user_age &amp;gt;= 63 THEN z.user_id ELSE NULL END) AS "9 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 63 AND z.user_age &amp;gt;= 56 THEN z.user_id ELSE NULL END) AS "8 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 56 AND z.user_age &amp;gt;= 49 THEN z.user_id ELSE NULL END) AS "7 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 49 AND z.user_age &amp;gt;= 42 THEN z.user_id ELSE NULL END) AS "6 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 42 AND z.user_age &amp;gt;= 35 THEN z.user_id ELSE NULL END) AS "5 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 35 AND z.user_age &amp;gt;= 28 THEN z.user_id ELSE NULL END) AS "4 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 28 AND z.user_age &amp;gt;= 21 THEN z.user_id ELSE NULL END) AS "3 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 21 AND z.user_age &amp;gt;= 14 THEN z.user_id ELSE NULL END) AS "2 weeks",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 14 AND z.user_age &amp;gt;= 7 THEN z.user_id ELSE NULL END) AS "1 week",
       COUNT(DISTINCT CASE WHEN z.user_age &amp;lt; 7 THEN z.user_id ELSE NULL END) AS "Less than a week"
  FROM (
        SELECT e.occurred_at,
               u.user_id,
               DATE_TRUNC('week',u.activated_at) AS activation_week,
               EXTRACT('day' FROM e.occurred_at - u.activated_at) AS age_at_event,
               EXTRACT('day' FROM '2014-09-01'::TIMESTAMP - u.activated_at) AS user_age
          FROM tutorial.yammer_users u
          JOIN tutorial.yammer_events e
            ON e.user_id = u.user_id
           AND e.event_type = 'engagement'
           AND e.event_name = 'login'
           AND e.occurred_at &amp;gt;= '2014-05-01'
           AND e.occurred_at &amp;lt; '2014-09-01'
         WHERE u.activated_at IS NOT NULL
       ) z
  GROUP BY week
  ORDER BY week
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M_9bz6_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/65b06037-57e2-472d-904e-3e47577db3e4/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M_9bz6_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/65b06037-57e2-472d-904e-3e47577db3e4/image.png" alt="" width="525" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typical Retention pattern which decrease in active users over time.&lt;/li&gt;
&lt;li&gt;However, 10+ weeks users WAU can be seen as affecting WAU because it shows an exceptional sharp drop on the chart &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.  WAU per device
&lt;/h3&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('week',e.occurred_at) AS "week",
       COUNT(DISTINCT e.user_id) AS weekly_active_users,
       COUNT(DISTINCT CASE WHEN e.device IN ('macbook pro','lenovo thinkpad','macbook air','dell inspiron notebook',
          'asus chromebook','dell inspiron desktop','acer aspire notebook','hp pavilion desktop','acer aspire desktop','mac mini')
          THEN e.user_id ELSE NULL END) AS computer,
       COUNT(DISTINCT CASE WHEN e.device IN ('iphone 5','samsung galaxy s4','nexus 5','iphone 5s','iphone 4s','nokia lumia 635',
       'htc one','samsung galaxy note','amazon fire phone') THEN e.user_id ELSE NULL END) AS phone,
        COUNT(DISTINCT CASE WHEN e.device IN ('ipad air','nexus 7','ipad mini','nexus 10','kindle fire','windows surface',
        'samsumg galaxy tablet') THEN e.user_id ELSE NULL END)
&lt;/code&gt;&lt;/pre&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM tutorial.yammer_events e
LEFT JOIN tutorial.yammer_users u
ON e.user_id = u.user_id
WHERE u.activated_at IS NOT NULL 
GROUP BY week
ORDER BY week
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Au4ku0M9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/fe6ebfa2-e7cb-42df-b2fe-368b65e857ea/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Au4ku0M9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/fe6ebfa2-e7cb-42df-b2fe-368b65e857ea/image.png" alt="" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---KIELrQe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/f0bbf851-f8a3-447b-890d-1b852054a8f5/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---KIELrQe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/f0bbf851-f8a3-447b-890d-1b852054a8f5/image.png" alt="" width="445" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After 8/4, Weeckly active user is significantly decreased.&lt;/li&gt;
&lt;li&gt;For computer, it seems seanal decrease, but it's not recovered after that. (need to check) &lt;/li&gt;
&lt;li&gt;Table has huge decrease by around 30%&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Email data analysis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Email is common source of engagement&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Engagement related to Email
&lt;/h4&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('week', occurred_at) AS week,
       COUNT(CASE WHEN e.action = 'sent_weekly_digest' THEN e.user_id ELSE NULL END) AS weekly_emails,
       COUNT(CASE WHEN e.action = 'sent_reengagement_email' THEN e.user_id ELSE NULL END) AS reengagement_emails,
       COUNT(CASE WHEN e.action = 'email_open' THEN e.user_id ELSE NULL END) AS email_opens,
       COUNT(CASE WHEN e.action = 'email_clickthrough' THEN e.user_id ELSE NULL END) AS email_clickthroughs
  FROM tutorial.yammer_emails e
 GROUP BY week
 ORDER BY week
&lt;/code&gt;&lt;/pre&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT DATE_TRUNC('week',occurred_at) AS week,
       action,
       COUNT(user_id) as cnt_user
FROM tutorial.yammer_emails
GROUP BY week, action
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---QwJPWkH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/b08f4e0f-670b-4c9c-8095-3166a91159ac/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---QwJPWkH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/b08f4e0f-670b-4c9c-8095-3166a91159ac/image.png" alt="" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email_clickthrough (clicking link in emails) is decreased &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Opening Emails rate
&lt;/h4&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT week,
       weekly_opens/CASE WHEN weekly_emails = 0 THEN 1 ELSE weekly_emails END::FLOAT AS weekly_open_rate,
       weekly_ctr/CASE WHEN weekly_opens = 0 THEN 1 ELSE weekly_opens END::FLOAT AS weekly_ctr,
       retain_opens/CASE WHEN retain_emails = 0 THEN 1 ELSE retain_emails END::FLOAT AS retain_open_rate,
       retain_ctr/CASE WHEN retain_opens = 0 THEN 1 ELSE retain_opens END::FLOAT AS retain_ctr
  FROM (
SELECT DATE_TRUNC('week',e1.occurred_at) AS week,
       COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e1.user_id ELSE NULL END) AS weekly_emails,
       COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e2.user_id ELSE NULL END) AS weekly_opens,
       COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e3.user_id ELSE NULL END) AS weekly_ctr,
       COUNT(CASE WHEN e1.action = 'sent_reengagement_email' THEN e1.user_id ELSE NULL END) AS retain_emails,
       COUNT(CASE WHEN e1.action = 'sent_reengagement_email' THEN e2.user_id ELSE NULL END) AS retain_opens,
       COUNT(CASE WHEN e1.action = 'sent_reengagement_email' THEN e3.user_id ELSE NULL END) AS retain_ctr
  FROM tutorial.yammer_emails e1
  LEFT JOIN tutorial.yammer_emails e2
    ON e2.occurred_at &amp;gt;= e1.occurred_at
   AND e2.occurred_at &amp;lt; e1.occurred_at + INTERVAL '5 MINUTE'
   AND e2.user_id = e1.user_id
   AND e2.action = 'email_open'
  LEFT JOIN tutorial.yammer_emails e3
    ON e3.occurred_at &amp;gt;= e2.occurred_at
   AND e3.occurred_at &amp;lt; e2.occurred_at + INTERVAL '5 MINUTE'
   AND e3.user_id = e2.user_id
   AND e3.action = 'email_clickthrough'
 WHERE e1.occurred_at &amp;gt;= '2014-06-01'
   AND e1.occurred_at &amp;lt; '2014-09-01'
   AND e1.action IN ('sent_weekly_digest','sent_reengagement_email')
 GROUP BY 1
       ) a
 ORDER BY 1
SELECT week,
       weekly_opens/CASE WHEN weekly_emails = 0 THEN 1 ELSE weekly_emails END::FLOAT AS weekly_open_rate,
       weekly_ctr/CASE WHEN weekly_opens = 0 THEN 1 ELSE weekly_opens END::FLOAT AS weekly_ctr,
       retain_opens/CASE WHEN retain_emails = 0 THEN 1 ELSE retain_emails END::FLOAT AS retain_open_rate,
       retain_ctr/CASE WHEN retain_opens = 0 THEN 1 ELSE retain_opens END::FLOAT AS retain_ctr
  FROM (
SELECT DATE_TRUNC('week',e1.occurred_at) AS week,
       COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e1.user_id ELSE NULL END) AS weekly_emails,
       COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e2.user_id ELSE NULL END) AS weekly_opens,
       COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e3.user_id ELSE NULL END) AS weekly_ctr,
       COUNT(CASE WHEN e1.action = 'sent_reengagement_email' THEN e1.user_id ELSE NULL END) AS retain_emails,
       COUNT(CASE WHEN e1.action = 'sent_reengagement_email' THEN e2.user_id ELSE NULL END) AS retain_opens,
       COUNT(CASE WHEN e1.action = 'sent_reengagement_email' THEN e3.user_id ELSE NULL END) AS retain_ctr
  FROM tutorial.yammer_emails e1
  LEFT JOIN tutorial.yammer_emails e2
    ON e2.occurred_at &amp;gt;= e1.occurred_at
   AND e2.occurred_at &amp;lt; e1.occurred_at + INTERVAL '5 MINUTE'
   AND e2.user_id = e1.user_id
   AND e2.action = 'email_open'
  LEFT JOIN tutorial.yammer_emails e3
    ON e3.occurred_at &amp;gt;= e2.occurred_at
   AND e3.occurred_at &amp;lt; e2.occurred_at + INTERVAL '5 MINUTE'
   AND e3.user_id = e2.user_id
   AND e3.action = 'email_clickthrough'
 WHERE e1.occurred_at &amp;gt;= '2014-06-01'
   AND e1.occurred_at &amp;lt; '2014-09-01'
   AND e1.action IN ('sent_weekly_digest','sent_reengagement_email')
 GROUP BY week
       ) a
 ORDER BY week
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UfFaHUPO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/ba0bd335-add4-4433-9fe6-c6793dc42851/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UfFaHUPO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://velog.velcdn.com/images/minddd64/post/ba0bd335-add4-4433-9fe6-c6793dc42851/image.png" alt="" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This shows the rate of opening Emails in 5 minutes. &lt;/li&gt;
&lt;li&gt;As we saw above, weekly clickthrough is significantly decreased after 8/4&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Summary of Analysis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Both signup-users and activated-users are decreased after 8/4 and recovered slightly (1. New users) &lt;/li&gt;
&lt;li&gt;Even though decreasing active user is common pattern in retention chart, 10+ week users significantly decreased after 8/4 (2. User Cohort)
&lt;/li&gt;
&lt;li&gt;According to WAU of phone and tablet are decreased by 16.5%, 30.8%, high possibility in problems of mobile apps. (3. WAU per device)&lt;/li&gt;
&lt;li&gt;Weekly digest clickthrough, and E-mail opening rate in 5 minutes are all decreased comparing to previous week. (4. Email data analysis)&lt;/li&gt;
&lt;li&gt;Link in Email, phrase inducing clickthrough,or email link in digest email should be checked.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Review
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cohort analysis&lt;/li&gt;
&lt;li&gt;In this project, WAU was divided by user cohort and device to find the reason of decrease. &lt;/li&gt;
&lt;li&gt;If I divide the whole into parts like this, I can observe the cause of the change that was not known when you looked at the whole.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
