Merged PR 2441: KPIs - Customer Segmentation based on listings
This PR creates a new model int_core__mtd_accommodation_segmentation that provides the customer segments based on listing activity: - 0 - 1-5 - 6-20 - 21-60 - 61+ For end of April 2024, the volume distribution on number of deals and total listings booked is:  For information, I estimate that around 3% of listings with bookings are missed, according to the data displayed in the KPIs for 30th April 2024. This is because we enforce deal-based categorisation (same happens with the deal view, anyway) Related work items: #19325
This commit is contained in:
parent
b79df1b42e
commit
65ebd8c2d2
2 changed files with 99 additions and 0 deletions
|
|
@ -0,0 +1,42 @@
|
||||||
|
{{ config(materialized="table", unique_key=["date", "id_deal"]) }}
|
||||||
|
with
|
||||||
|
int_core__mtd_accommodation_lifecycle as (
|
||||||
|
select * from {{ ref("int_core__mtd_accommodation_lifecycle") }}
|
||||||
|
),
|
||||||
|
int_core__unique_accommodation_to_user as (
|
||||||
|
select * from {{ ref("int_core__unique_accommodation_to_user") }}
|
||||||
|
),
|
||||||
|
int_core__unified_user as (select * from {{ ref("int_core__unified_user") }}),
|
||||||
|
|
||||||
|
active_accommodations_per_deal as (
|
||||||
|
select
|
||||||
|
al.date,
|
||||||
|
uu.id_deal,
|
||||||
|
sum(
|
||||||
|
case when al.has_been_booked_within_last_12_months then 1 else 0 end
|
||||||
|
) as accommodations_booked_in_12_months
|
||||||
|
from int_core__mtd_accommodation_lifecycle al
|
||||||
|
inner join
|
||||||
|
int_core__unique_accommodation_to_user atu
|
||||||
|
on al.id_accommodation = atu.id_accommodation
|
||||||
|
inner join int_core__unified_user uu on uu.id_user = atu.id_user_owner
|
||||||
|
where uu.id_deal is not null
|
||||||
|
group by 1, 2
|
||||||
|
)
|
||||||
|
select
|
||||||
|
date,
|
||||||
|
id_deal,
|
||||||
|
case
|
||||||
|
when accommodations_booked_in_12_months = 0
|
||||||
|
then '0'
|
||||||
|
when accommodations_booked_in_12_months between 1 and 5
|
||||||
|
then '1-5'
|
||||||
|
when accommodations_booked_in_12_months between 6 and 20
|
||||||
|
then '6-20'
|
||||||
|
when accommodations_booked_in_12_months between 21 and 60
|
||||||
|
then '21-60'
|
||||||
|
when accommodations_booked_in_12_months >= 61
|
||||||
|
then '61+'
|
||||||
|
end as active_accommodations_per_deal_segmentation,
|
||||||
|
accommodations_booked_in_12_months
|
||||||
|
from active_accommodations_per_deal
|
||||||
|
|
@ -753,6 +753,63 @@ models:
|
||||||
data_type: boolean
|
data_type: boolean
|
||||||
description: If the listing has had a booking created in the past 12 months.
|
description: If the listing has had a booking created in the past 12 months.
|
||||||
|
|
||||||
|
- name: int_core__mtd_accommodation_segmentation
|
||||||
|
description: |
|
||||||
|
This model contains the historic information regarding the customer segmentation based on active accommodations,
|
||||||
|
also known as listings. This model depends on the int_core__mtd_accommodation_lifecycle, thus the time granularity
|
||||||
|
is the same as for any mtd model.
|
||||||
|
|
||||||
|
The segmentation is applied at deal level, not at user host level. This has the drawback that hosts without a
|
||||||
|
deal assigned won't be considered in this segmentation. However, it correctly categorises customers based on the
|
||||||
|
number of listings across the different user hosts each deal can have.
|
||||||
|
|
||||||
|
The segmentation is available in the field active_accommodations_per_deal_segmentation. It considers listings that
|
||||||
|
have been booked within the last 12 months. Thus, it means it only considers the lifecycle states of
|
||||||
|
03-First Time Booked, 04-Active and 07-Reactivated. The segments are the following:
|
||||||
|
- '0'
|
||||||
|
- '1-5'
|
||||||
|
- '6-20'
|
||||||
|
- '21-60'
|
||||||
|
- '61+'
|
||||||
|
These segments are inspired from the ones RevOps team uses, but the associated deals and listings volume will differ
|
||||||
|
since the listing activity logic considered is different.
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- dbt_utils.unique_combination_of_columns:
|
||||||
|
combination_of_columns:
|
||||||
|
- date
|
||||||
|
- id_deal
|
||||||
|
|
||||||
|
columns:
|
||||||
|
- name: date
|
||||||
|
data_type: date
|
||||||
|
description: The date for the month-to-date. Information is inclusive to the date displayed.
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
|
||||||
|
- name: id_deal
|
||||||
|
data_type: character varying
|
||||||
|
description: Id of the deal associated to the host.
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
|
||||||
|
- name: active_accommodations_per_deal_segmentation
|
||||||
|
data_type: character varying
|
||||||
|
description: The segmentation based on the number of listings booked in the last 12 months.
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- accepted_values:
|
||||||
|
values:
|
||||||
|
- '0'
|
||||||
|
- '1-5'
|
||||||
|
- '6-20'
|
||||||
|
- '21-60'
|
||||||
|
- '61+'
|
||||||
|
|
||||||
|
- name: accommodations_booked_in_12_months
|
||||||
|
data_type: integer
|
||||||
|
description: Informative field of the actual number of listings booked in the last 12 months
|
||||||
|
|
||||||
- name: int_core__mtd_deal_lifecycle
|
- name: int_core__mtd_deal_lifecycle
|
||||||
description: |
|
description: |
|
||||||
This model contains the historic information regarding the lifecycle of hosts, at deal level.
|
This model contains the historic information regarding the lifecycle of hosts, at deal level.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue