Snowflake Cortexで、お客様のお肌悩みを可視化する方法
Snowflake Cortexで、お客様のお肌悩みを可視化する方法
1. 背景
スキンケアは、お客様1人1人の独自のお肌悩みによって、求める商品が変わってきます。例えば、乾燥肌、シミ予防、くすみなど、個々の悩みに応じて、訴求に効果的な商品やキャンペーンは全く異なります。そのため、顧客の具体的な悩みを正確に把握し、それに合わせたマーケティング戦略を立てることが重要です。
N organicでは幅広いお客様のお肌悩みに応じて、さまざまな種類の商品を提供しており、顧客がどのような悩みを持ち、どの商品に興味を示しているのかを効率的に分析する手法が求められています。
N organicでもお客様のお肌悩みに合わせて、数多くの商品を展開
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_en
、text_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を活用して、口コミデータからお客様の肌悩みを効率的に分類・可視化。
- 日本語テキストを英語に翻訳し、機械学習モデルで分析することで、分類精度を向上。
- これにより、定性的な肌悩みを定量的に把握し、マーケティング戦略や商品開発に活用するための貴重な洞察を得ることができました。
「N organic」、「FAS」等の化粧品ブランドを展開している株式会社シロクのエンジニアブログです。 ECサイトを中心とした自社サービスの開発・運用を行っています。 sirok.jp/norganic
Discussion