❄️

Snowflake Cortexで、お客様のお肌悩みを可視化する方法

2024/11/26に公開

Snowflake Cortexで、お客様のお肌悩みを可視化する方法

1. 背景

スキンケアは、お客様1人1人の独自のお肌悩みによって、求める商品が変わってきます。例えば、乾燥肌、シミ予防、くすみなど、個々の悩みに応じて、訴求に効果的な商品やキャンペーンは全く異なります。そのため、顧客の具体的な悩みを正確に把握し、それに合わせたマーケティング戦略を立てることが重要です。

N organicでは幅広いお客様のお肌悩みに応じて、さまざまな種類の商品を提供しており、顧客がどのような悩みを持ち、どの商品に興味を示しているのかを効率的に分析する手法が求められています。


N organicでもお客様のお肌悩みに合わせて、数多くの商品を展開

https://sirok.jp/norganic

2. ゴール

お肌の悩みは主観的な価値基準に基づく定性的なものであり、これを数値化してデータとして扱うのは困難とされています。しかし、マーケティング戦略や商品開発に活用するためには、これらの悩みを定量的に分析し、データとして活用する必要があります。

N organicでは、お客様の声を直接聞くために、膨大な量の口コミデータを収集しています。その中には、肌悩みに関する投稿が数多く含まれており、非常に貴重なデータとして取り扱っております。これらのデータをモデリングしすることで、肌悩みをラベリングし、お客様のご要望を効果的に分析できると考えました。

3. Snowflake Cortexについて

口コミデータから肌悩みをラベリングする上で、Snowflake LLMを活用しました。
Snowflake Cortexは、Snowflakeが提供する機械学習および人工知能の機能を統合したプラットフォームです。データウェアハウス内で直接データを処理し、以下のような高度な分析を可能にします。

  • テキスト翻訳:多言語のテキストを相互に翻訳。
  • 感情分析:テキストの感情を数値化(ポジティブ、ネガティブ、中立など)。
  • テキスト分類:指定したカテゴリにテキストを分類。
  • テキスト要約:与えられた文章を要約。

これにより、データの移動や外部ツールの使用なしに、一連の分析を効率的に実行できます。

4. 実際のコード

以下は、Snowflakeクエリです。

WITH cortex_reviews AS (
    SELECT DISTINCT 
        id, 
        user_id,
        title,
        snowflake.cortex.translate(title, 'ja', 'en') AS title_en,
        text,
        snowflake.cortex.translate(text, 'ja', 'en') AS text_en,
        CONCAT(NVL(title_en, ''), ':', NVL(text_en, '')) AS title_with_text
    FROM REVIEWS
    WHERE DATE(created_at) >= '2024-11-01'
        AND text IS NOT NULL
)

SELECT 
    *,
    JSON_EXTRACT_PATH_TEXT(SNOWFLAKE.CORTEX.CLASSIFY_TEXT(
        title_with_text,
        [
            'moisture', 'firmness', 'skin irritation', 'aging skin', 'dry fine lines', 'dark spots',
            'dullness', 'wrinkle improvement', 'brightening', 'pores', 'acne', 'redness',
            'fragrance', 'texture', 'price', 'usage feel', 'hair'
        ],
        {'task_description': 'Return a classification of the skin and hair concerns in the text'}
    ), 'label') AS user_concerns
FROM cortex_reviews;

コードの説明

  • データ取得と前処理
    • 口コミデータREVIEWSをお客様idごとで取得。
    • 日本語のタイトルとテキストを英語に翻訳。(title_entext_en
    • 日本語テキストをcortex上で学習をすると、分類の精度が悪かったため、日本語を英語に訳し、モデリングすることで、分類精度の向上を試みました。
  • テキスト分類
    • SNOWFLAKE.CORTEX.CLASSIFY_TEXT関数を使用して、テキストを指定したカテゴリに分類。
    • 結果からlabelを抽出し、user_concernsとして表示。
    • なお、今回はtask_descriptionをパラメータとして記載しております。どのような分類を行うかをプロンプトで設定することで、より精緻な分類を実現しています。
+ {'task_description': 'Return a classification of the skin and hair concerns in the text'}

分類した肌悩みのカテゴリー

今回、スキンケアでよく必要とされているニーズを17種類抽出し、口コミデータを分類しています。
以下のラベルの対応表を示します。

日本語のラベル 英語のラベル
保湿 moisture
ハリ firmness
肌荒れ skin irritation
年齢肌 aging skin
乾燥小ジワ dry fine lines
シミ dark spots
くすみ dullness
シワ改善 wrinkle improvement
美白 brightening
毛穴 pores
ニキビ acne
赤み redness
香り fragrance
テクスチャ texture
価格 price
使用感 usage feel
ヘアケア hair

5. アウトプット

上記のクエリを実行すると、以下のような情報が得られます。

  • id、user_id:レビューの識別子とユーザー情報。
  • title、text:元の日本語のタイトルとテキスト。
  • title_en、text_en:英語に翻訳されたタイトルとテキスト。
  • title_with_text:翻訳後のタイトルとテキストを結合したもの。
  • user_concerns:レビューが分類された肌や髪の悩みのカテゴリ。

サンプル出力

id user_id title text title_en text_en title_with_text user_concerns
1 123 素晴らしい保湿力 肌がしっとりします Great Moisturizing Power Skin feels moist Great Moisturizing Power:Skin feels moist moisture
2 456 価格が高い コスパが悪いです Expensive Not cost-effective Expensive:Not cost-effective price

実データによる集計結果

どのようなお肌悩みが傾向として多いかを、以下のように分析することできました。
11月なので、やはり乾燥を気にされている方が多く、保湿のニーズが強そうです。

6. まとめ

  • Snowflake Cortexを活用して、口コミデータからお客様の肌悩みを効率的に分類・可視化。
  • 日本語テキストを英語に翻訳し、機械学習モデルで分析することで、分類精度を向上
  • これにより、定性的な肌悩みを定量的に把握し、マーケティング戦略や商品開発に活用するための貴重な洞察を得ることができました。
sirok engineer's blog

Discussion