십분위수 기반 파생 속성 사용 사례

마지막 업데이트: 2023-03-15
  • 주제:
  • Queries
    이 항목에 대한 자세한 내용 보기
  • 작성 대상:
  • Developer
    User
    Admin
    Leader

파생된 속성은 다른 다운스트림 플랫폼 서비스와 함께 사용하거나 실시간 고객 프로필 데이터에 게시할 수 있는 데이터 레이크의 데이터를 분석하는 복잡한 사용 사례를 용이하게 합니다.

이 예제 사용 사례에서는 실시간 고객 프로필 데이터에 사용할 십분위수 기반 파생 속성을 만드는 방법을 보여 줍니다. 이 안내서에서는 항공사 충성도 시나리오를 예로 들어, 카테고리적 십분위수를 사용하여 등급 속성을 기반으로 대상을 세그먼트화하고 만드는 데이터 세트를 만드는 방법을 알려줍니다.

다음과 같은 주요 개념이 나와 있습니다.

  • 십분위수 버킷팅에 대한 스키마 생성.
  • 카테고리별 십분위수 만들기.
  • 복잡한 파생 특성 만들기.
  • 전환 확인 기간 동안의 십분위수 계산.
  • 집계, 등급 지정 및 고유 ID 추가를 보여 주는 예제 쿼리를 통해 이러한 십분위수 버킷을 기반으로 대상을 생성할 수 있습니다.

시작하기

이 안내서를 사용하려면 의 작업 이해를 필요로 합니다. 쿼리 서비스에서 쿼리 실행 및 Adobe Experience Platform의 다음 구성 요소:

목표

이 문서에 제공된 예제 는 십분위수를 사용하여 항공사 충성도 스키마의 등급 데이터에 대한 파생된 속성을 작성합니다. 파생 속성을 사용하면 선택한 카테고리의 상위 'n'%를 기준으로 대상을 식별하여 데이터의 유틸리티를 최대화할 수 있습니다.

십분위수 기반 파생 속성 작성

특정 차원 및 해당 지표를 기반으로 십분위수 순위를 정의하려면 십분위수 버킷팅을 허용하도록 스키마를 디자인해야 합니다.

이 안내서는 항공사 충성도 데이터 세트를 사용하여 쿼리 서비스를 사용하여 다양한 전환 확인 기간 동안 날아온 마일을 기반으로 십분위수를 작성하는 방법을 보여줍니다.

쿼리 서비스를 사용하여 십분위수 만들기

Query Service를 사용하면 카테고리적 십분위수가 포함된 데이터 세트를 생성할 수 있습니다. 그런 다음 이 데이터 세트를 세그먼트화하여 속성 등급에 따라 대상자를 생성할 수 있습니다. 범주가 정의되어 있고 지표를 사용할 수 있는 한 다음 예에 표시된 개념을 사용하여 다른 십분위수 버킷 데이터 세트를 만들 수 있습니다.

예제 항공사 충성도 데이터는 XDM ExperienceEvents 클래스. 각 이벤트는 크레딧 또는 디베이트 마일리지에 대한 비즈니스 거래 기록이며 "Flyer", "Frequent", "Silver" 또는 "Gold"의 회원 충성도 상태입니다. 기본 ID 필드는 다음과 같습니다. membershipNumber.

샘플 데이터 세트

이 예제의 초기 항공사 충성도 데이터 세트는 "항공사 충성도 데이터"이며, 다음 스키마를 포함합니다. 스키마에 대한 기본 ID는 입니다. _profilefoundationreportingstg.membershipNumber.

항공 고객 충성도 데이터 스키마의 다이어그램입니다.

샘플 데이터

다음 표에는 _profilefoundationreportingstg 이 예제에 사용된 오브젝트입니다. 복잡한 파생 속성을 만들기 위한 십분위수 버킷의 사용에 대한 컨텍스트를 제공합니다.

노트

간결성을 위해 테넌트 ID입니다 _profilefoundationreportingstg 열 제목에서 네임스페이스의 시작부터 생략되었으며 문서 전체에서 후속 언급도 생략되었습니다.

.membershipNumber .emailAddress.address .transactionDate .transactionType .transactionDetails .mileage .loyaltyStatus
C435678623 sfeldmark1vr@studiopress.com 2022-01-01 STATUS_MILES 새 구성원 5000 전단지
B789279247 pgalton32n@barnesandnoble.com 2022-02-01 AWARD_MILES 에프라 7500 실버
B789279247 pgalton32n@barnesandnoble.com 2022-02-01 STATUS_MILES 에프라 7500 실버
B789279247 pgalton32n@barnesandnoble.com 2022-02-10 AWARD_MILES FRA-JF 5000 실버
A123487284 rritson1zn@sciencedaily.com 2022-01-07 STATUS_MILES 새 신용 카드 10000 전단지

십분위수 데이터 세트 생성

위에 표시된 항공사 충성도 데이터에서 .mileage 값은 취한 모든 개별 비행에 대해 멤버가 비행한 마일 수를 포함합니다. 이 데이터는 라이프타임 전환 및 다양한 전환 확인 기간을 통해 날아온 마일 수에 대한 십분위수를 만드는 데 사용됩니다. 이를 위해 각 전환 기간에 대한 맵 데이터 유형의 십분위수와 아래에 지정된 각 전환 기간에 대한 적절한 십분위수를 포함하는 데이터 세트가 만들어집니다 membershipNumber.

쿼리 서비스를 사용하여 십분위수 데이터 세트를 만들려면 "항공사 충성도 십분위수 스키마"를 만듭니다.

"항공사 충성도 십분위수 스키마"의 다이어그램입니다.

실시간 고객 프로필에 대한 스키마 활성화

실시간 고객 프로필에서 사용하기 위해 Experience Platform에 수집되는 데이터는 프로필에 대해 활성화된 XDM(경험 데이터 모델) 스키마. 프로필에 대해 스키마를 활성화하려면 XDM 개인 프로필 또는 XDM ExperienceEvent 클래스를 구현해야 합니다.

스키마 레지스트리 API를 사용하여 실시간 고객 프로필에 사용하도록 스키마 활성화 또는 스키마 편집기 사용자 인터페이스. 프로필에 대해 스키마를 활성화하는 방법에 대한 자세한 지침은 해당 설명서에서 확인할 수 있습니다.

그런 다음 모든 십분위수 관련 필드 그룹에 재사용할 데이터 유형을 만듭니다. 십분위수 필드 그룹 만들기는 샌드박스당 한 번의 단계입니다. 모든 십분위수 관련 스키마에 다시 사용할 수도 있습니다.

ID 네임스페이스를 만들고 기본 식별자로 표시

십분위수와 함께 사용하기 위해 만들어진 모든 스키마에는 기본 ID가 할당되어야 합니다. 다음을 수행할 수 있습니다. Adobe Experience Platform 스키마 UI에서 ID 필드 정의또는 스키마 레지스트리 API.

또한 쿼리 서비스를 사용하면 SQL을 통해 직접 임시 스키마 데이터 세트 필드에 대한 ID 또는 기본 ID를 설정할 수 있습니다. 다음에서 설명서를 참조하십시오. 임시 스키마 ID에서 보조 ID 및 기본 ID 설정 추가 정보.

전환 확인 기간 동안 십분위수를 계산하기 위한 쿼리를 만듭니다

다음 예제에서는 전환 확인 기간 동안 십분위수를 계산하기 위한 SQL 쿼리를 보여 줍니다.

템플릿은 UI에서 쿼리 편집기를 사용하거나 쿼리 서비스 API.

CREATE TABLE AS airline_loyality_decile
{  WITH summed_miles_1 AS (
        SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
            _profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
            SUM(_profilefoundationreportingstg.mileage) AS totalMiles
        FROM airline_loyalty_data
        WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
    GROUP BY 1,2
    ),
    summed_miles_3 AS (
        SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
            _profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
            SUM(_profilefoundationreportingstg.mileage) AS totalMiles
        FROM airline_loyalty_data
        WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 1))
    GROUP BY 1,2
    ),
    summed_miles_6 AS (
        SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
            _profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
            SUM(_profilefoundationreportingstg.mileage) AS totalMiles
        FROM airline_loyalty_data
        WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 4))
    GROUP BY 1,2
    ),
    rankings_1 AS (
        SELECT membershipNumber,
            loyaltyStatus,
            totalMiles,
            NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
        FROM summed_miles_1
    ),
    rankings_3 AS (
        SELECT membershipNumber,
            loyaltyStatus,
            totalMiles,
            NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
        FROM summed_miles_3
    ),
    rankings_6 AS (
        SELECT membershipNumber,
            loyaltyStatus,
            totalMiles,
            NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
        FROM summed_miles_6
    ),
    map_1 AS (
        SELECT membershipNumber,
            MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
        FROM rankings_1
        GROUP BY membershipNumber
    ),
    map_3 AS (
        SELECT membershipNumber,
            MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth3
        FROM rankings_3
        GROUP BY membershipNumber
    ),
    map_6 AS (
        SELECT membershipNumber,
            MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth6
        FROM rankings_6
        GROUP BY membershipNumber
    ),
    all_memberships AS (
        SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
    )
    SELECT STRUCT(
            all_memberships.membershipNumber AS membershipNumber,
            STRUCT(
                    map_1.decileMonth1 AS decileMonth1,
                    map_3.decileMonth3 AS decileMonth3,
                    map_6.decileMonth6 AS decileMonth6
            ) AS decilesMileage
        ) AS _profilefoundationreportingstg
    FROM all_memberships
        LEFT JOIN map_1 ON  (all_memberships.membershipNumber = map_1.membershipNumber)
        LEFT JOIN map_3 ON  (all_memberships.membershipNumber = map_3.membershipNumber)
        LEFT JOIN map_6 ON  (all_memberships.membershipNumber = map_6.membershipNumber)
    }

쿼리 검토

예제 쿼리의 섹션은 아래에 자세히 조사됩니다.

전환 기간

십분위수 데이터 유형에는 1, 3, 6, 9, 12 및 라이프타임 전환 확인을 위한 버킷이 포함됩니다. 쿼리는 1, 3 및 6개월의 전환 확인 기간을 사용하므로 각 전환 확인 기간에 대한 임시 테이블을 만들기 위해 각 섹션에는 몇 가지 "반복된" 쿼리가 포함됩니다.

노트

소스 데이터에 전환 확인 기간을 결정하는 데 사용할 수 있는 열이 없는 경우 모든 십분위수 클래스 순위가 아래에 수행됩니다. decileMonthAll.

집계

십분위수 버킷을 만들기 전에 마일리지를 함께 집계하려면 일반 테이블 표현식(CTE)을 사용합니다. 이는 특정 전환 확인 기간에 대한 총 마일리지를 제공합니다. CTE는 일시적으로 존재하며 더 큰 쿼리의 범위 내에서만 사용할 수 있습니다.

summed_miles_1 AS (
    SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
           _profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
           SUM(_profilefoundationreportingstg.mileage) AS totalMiles
    FROM airline_loyalty_data
    WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
    GROUP BY 1,2
)

블록은 템플릿에서 두 번 반복됩니다(summed_miles_3summed_miles_6) 다른 전환 확인 기간에 대한 데이터를 생성하기 위해 날짜 계산이 변경되었습니다.

쿼리에 대한 ID, 차원 및 지표 열(membershipNumber, loyaltyStatustotalMiles 각각 참조).

순위

십분위수를 사용하여 범주형 버킷팅을 수행할 수 있습니다. 순위 번호를 만들려면 NTILE 함수는 의 매개 변수와 함께 사용됩니다. 10 WINDOW 내에서 loyaltyStatus 필드. 그 결과 1에서 10까지 순위가 매겨집니다. 설정 ORDER BY 조항 WINDOWDESC 의 순위 값을 확인하려면 1 이(가)에게 제공됩니다. 최대 차원 내 지표.

rankings_1 AS (
    SELECT membershipNumber,
           loyaltyStatus,
           totalMiles,
           NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
    FROM summed_miles_1
)

맵 집계

여러 전환 확인 기간을 사용하는 경우 다음을 사용하여 십분위수 버킷 맵을 미리 만들어야 합니다. MAP_FROM_ARRAYSCOLLECT_LIST 함수. 예제 코드 조각에서 MAP_FROM_ARRAYS 키( )로 맵을 만듭니다.loyaltyStatus) 및 값(decileBucket) 배열입니다. COLLECT_LIST 지정된 열에 있는 모든 값이 있는 배열을 반환합니다.

map_1 AS (
    SELECT membershipNumber,
           MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
    FROM rankings_1
    GROUP BY membershipNumber
)
노트

십분위수 등급이 라이프타임 기간 동안만 필요한 경우에는 맵 집계가 필요하지 않습니다.

고유 ID

고유 ID 목록(membershipNumber)는 모든 멤버십의 고유 목록을 만드는 데 필요합니다.

all_memberships AS (
    SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
노트

십분위수 순위가 라이프타임 기간 동안만 필요한 경우 이 단계를 생략하고 다음을 기준으로 집계할 수 있습니다. membershipNumber 마지막 단계에서 수행할 수 있습니다.

모든 임시 데이터 결합

마지막 단계는 모든 임시 자료를 필드 그룹의 십분위수 구조와 동일한 형태로 함께 결합하는 것이다.

SELECT STRUCT(
           all_memberships.membershipNumber AS membershipNumber,
           STRUCT(
                map_1.decileMonth1 AS decileMonth1,
                map_3.decileMonth3 AS decileMonth3,
                map_6.decileMonth6 AS decileMonth6
           ) AS decilesMileage
       ) AS _profilefoundationreportingstg
FROM all_memberships
    LEFT JOIN map_1 ON  (all_memberships.membershipNumber = map_1.membershipNumber)
    LEFT JOIN map_3 ON  (all_memberships.membershipNumber = map_3.membershipNumber)
    LEFT JOIN map_6 ON  (all_memberships.membershipNumber = map_6.membershipNumber)

라이프타임 데이터만 사용할 수 있는 경우 쿼리는 다음과 같이 표시됩니다.

SELECT STRUCT(
           rankings.membershipNumber AS membershipNumber,
           STRUCT(
                MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonthAll
           ) AS decilesMileage
       ) AS _profilefoundationreportingstg
FROM rankings
GROUP BY rankings.membershipNumber

십분위수의 사용으로 인해 쿼리 결과에서 순위 번호와 백분위수 간의 상관 관계가 보장됩니다. 각 등급은 10%와 같으므로 상위 30%를 기준으로 대상을 식별하려면 등급 1, 2 및 3만 타겟팅하면 됩니다.

쿼리 템플릿 실행

쿼리를 실행하여 십분위수 데이터 세트를 채웁니다. 쿼리를 템플릿으로 저장하고 케이던스로 실행되도록 예약할 수도 있습니다. 템플릿으로 저장할 때 쿼리를 업데이트하여 를 참조하는 생성 및 삽입 패턴을 사용할 수도 있습니다. table_exists 명령입니다. 사용 방법에 대한 자세한 정보 table_exists명령은에서 찾을 수 있습니다. SQL 구문 안내서.

다음 단계

위에 제공된 예제 사용 사례에서는 실시간 고객 프로필에서 십분위수 속성을 사용할 수 있도록 하는 단계를 강조표시합니다. 이렇게 하면 사용자 인터페이스 또는 RESTful API를 통해 세분화 서비스가 이러한 십분위수 버킷을 기반으로 대상을 생성할 수 있습니다. 다음을 참조하십시오. 세그먼테이션 서비스 개요 세그먼트를 만들고, 평가하고, 액세스하는 방법에 대한 정보를 제공합니다.

이 페이지의