kosmetyki z ektoiną

Czy kosmetyki z ektoiną dla skóry wrażliwej zmniejszają zaczerwienienie?

Coraz więcej marek widzi rosnący popyt na kosmetyki z ektoiną. To trend napędzany realnym efektem pielęgnacyjnym i świadomymi wyborami klientów. W takiej kategorii warto szybko znaleźć grupy, które wrócą po kolejne opakowanie.

RFM to prosty sposób na wyłapanie takich klientów, bez długiego treningu modeli. W Amazon SageMaker zrobisz to sprawnie, a wynik podepniesz pod kampanie i predykcje.

Dlaczego RFM działa dla klientów kosmetyków z ektoiną?

RFM dobrze opisuje nawyki zakupowe w beauty, gdzie decyzje są cykliczne i silnie związane z odczuwalnym efektem pielęgnacji.
Klienci wracają, gdy produkt działa i kończy się opakowanie. Recency pokaże, kto jest blisko kolejnego zakupu. Frequency odróżni osoby testujące od wiernych użytkowników. Monetary wskaże potencjał koszyka. W kategorii kosmetyki z ektoiną to praktyczne, bo odświeżenie, łagodzenie i ochrona skóry mają swój rytm powtórzeń. RFM da czytelne segmenty, które łatwo tłumaczą decyzje marketingowe.

Jak w danych odfiltrować zakupy kosmetyków z ektoiną?

Najpierw zawęź dane do linii z ektoiną, aby liczyć metryki tylko dla tej kategorii.

Skuteczne podejścia:

  • Atrybut składnika w katalogu produktów. Użyj pola ingredients lub tagów. Szukaj „ektoina”, „ectoine”, „ectoin”.
  • Słownik słów kluczowych w nazwach i opisach. Zastosuj normalizację do małych liter i usuwanie znaków diakrytycznych.
  • Kategoria produktowa. Jeśli istnieje kategoria „kosmetyki z ektoiną”, oprzyj filtr na product_category_id.

Przykładowa selekcja w Amazon Athena:

SELECT
  o.customer\_id,
  o.order\_id,
  oi.order_item_id,
  o.order\_date,
  oi.line\_total AS revenue,
  p.sku,
  p.name,
  p.ingredients
FROM ecommerce.orders o
JOIN ecommerce.order_items oi ON o.order_id = oi.order\_id
JOIN ecommerce.products p ON oi.product_id = p.product_id
WHERE lower(regexp\_replace(coalesce(p.ingredients, p.name), '[^a-z0-9 ]', '')) LIKE '%ectoin%'
   OR lower(regexp\_replace(coalesce(p.ingredients, p.name), '[^a-z0-9 ]', '')) LIKE '%ektoin%';

Jak przygotować recency, frequency i monetary w SageMaker?

Ustal okno obserwacji i kotwicę czasu, a następnie policz metryki per klient dla tej kategorii.

Elementy przygotowania:

  • Zakres czasu. Przyjmij stałe okno, na przykład 12 miesięcy, oraz datę odniesienia jako maksymalną datę w danych.
  • Zwroty i anulacje. Usuń pozycje zwrócone lub z ujemnym przychodem.
  • Unikalny identyfikator klienta. Połącz konta, jeśli to możliwe, aby uniknąć duplikatów.
  • Waluta. Przelicz przychód do jednej waluty i formatu.
  • Jednostka zakupu. Licz transakcje, nie tylko sztuki. Monetary to suma wartości pozycji z ektoiną.

Jak obliczyć metryki RFM krok po kroku w SageMaker?

Wystarczy notatnik w SageMaker Studio lub zadanie Processing z Pandas.

Przykładowy kod w notatniku:

import pandas as pd
from datetime import datetime

# Dane z S3, Athene lub Redshift. Tu dla uproszczenia Parquet w S3.
orders = pd.read\_parquet("s3://bucket/ecommerce/orders.parquet")
items = pd.read_parquet("s3://bucket/ecommerce/order_items.parquet")
products = pd.read\_parquet("s3://bucket/ecommerce/products.parquet")

def norm\_txt(x):
    import unicodedata, re
    x = '' if x is None else x
    x = unicodedata.normalize('NFKD', x).encode('ascii','ignore').decode('ascii').lower()
    return re.sub(r'[^a-z0-9 ]','', x)

products["search_blob"] = (products["ingredients"].fillna('') + ' ' + products["name"].fillna('')).map(norm_txt)
mask_ectoine = products["search_blob"].str.contains("ectoin") | products["search\_blob"].str.contains("ektoin")
ecto = products.loc[mask_ectoine, ["product_id"]]

# Filtrowanie linii z ektoiną i danych problematycznych
df = (items.merge(orders[["order_id","customer_id","order_date","status"]], on="order_id")
           .merge(ecto, on="product\_id"))
df = df[(df["status"]=="completed") & (df["line\_total"]>0)]

# Ustal datę odniesienia i okno
ref_date = df["order_date"].max()
window_start = ref_date - pd.Timedelta(days=365)
dfw = df[(df["order_date"]>=window_start) & (df["order_date"]<=ref_date)].copy()

# Agregacje RFM
g = dfw.groupby("customer\_id")
rfm = pd.DataFrame({
    "last_purchase_date": g["order\_date"].max(),
    "frequency": g["order\_id"].nunique(),
    "monetary": g["line\_total"].sum()
})
rfm["recency_days"] = (ref_date - rfm["last_purchase_date"]).dt.days

# Zapis do S3
rfm.reset_index().to_parquet("s3://bucket/features/rfm\_ectoine.parquet", index=False)

Jak ustalić progi i nazwy segmentów na podstawie RFM?

Najprościej skorzystać z kwantyli i przypisać czytelne nazwy.

Podejścia do progów:

  • Kwantyle. Podział na 5 części daje skale R, F i M od 1 do 5.
  • Progi biznesowe. Na przykład recency do 30 dni, frequency co najmniej 3, monetary powyżej mediany.
  • Hybryda. Progi biznesowe dla recency, kwantyle dla reszty.

Przykładowa implementacja skali i segmentów:

def score\_quantile(x, q):
    return pd.qcut(x, q=q, labels=False, duplicates="drop") + 1

# Uwaga: w recency mniejsza wartość jest lepsza, więc odwracamy
rfm["R_score"] = 6 - score_quantile(rfm["recency\_days"].rank(method="first"), q=5)
rfm["F_score"] = score_quantile(rfm["frequency"].rank(method="first"), q=5)
rfm["M_score"] = score_quantile(rfm["monetary"].rank(method="first"), q=5)

rfm["RFM_sum"] = rfm[["R_score","F_score","M_score"]].sum(axis=1)

def name\_segment(row):
    if row.R_score>=4 and row.F_score>=4:
        return "Lojalni użytkownicy ektoiny"
    if row.R_score>=4 and row.F_score<=2:
        return "Nowi lub powracający"
    if row.R_score<=2 and row.F_score>=4:
        return "Ryzyko utraty, wysoka lojalność"
    if row.RFM\_sum>=11:
        return "Wysoka wartość"
    if row.RFM\_sum<=6:
        return "Niska wartość"
    return "Średnia wartość"

rfm["segment"] = rfm.apply(name\_segment, axis=1)

Jak sprawdzić, czy segmenty RFM przewidują powtórne zakupy?

Zweryfikuj na danych przyszłych, czy segment ma wyższą stopę powrotu niż średnia.

Plan walidacji:

  • Podziel czas na okres kalibracji i okres testowy. Licz RFM w kalibracji, a w testowym sprawdź, kto dokonał kolejnego zakupu ektoiny.
  • Porównaj wskaźnik powrotu per segment. Oblicz lift względem średniej.
  • Dodatkowo zbuduj prosty model logistyczny z segmentami jako cechą i sprawdź AUC.

Przykładowy kod walidacji:

cal_end = ref_date
test_end = ref_date + pd.Timedelta(days=90)

future = df[(df["order_date"]>cal_end) & (df["order_date"]<=test_end)]
repeats = future.groupby("customer_id")["order_id"].nunique().rename("repeat\_cnt")
lbl = (repeats>0).astype(int)

eval_df = rfm.join(lbl, how="left").fillna({"repeat_cnt":0})
eval_df["repeat_label"] = (eval_df["repeat_cnt"]>0).astype(int)

seg_stats = eval_df.groupby("segment")["repeat_label"].mean().rename("repeat_rate").sort\_values(ascending=False)
print(seg\_stats)

# Prosty model
import numpy as np
from sklearn.linear\_model import LogisticRegression
from sklearn.metrics import roc_auc_score
X = pd.get_dummies(eval_df[["R_score","F_score","M_score","segment"]], drop_first=True)
y = eval_df["repeat_label"]
model = LogisticRegression(max\_iter=200)
model.fit(X, y)
pred = model.predict\_proba(X)[:,1]
print("AUC:", roc_auc_score(y, pred))

Jak połączyć segmenty RFM z modelami ML w SageMaker?

RFM może być samodzielną taktyką i jednocześnie dobrą cechą do modeli predykcyjnych.

Wykorzystanie w SageMaker:

  • Model skłonności do zakupu kosmetyków z ektoiną. Dodaj R, F, M i segment jako cechy do algorytmu gradientowego.
  • Model ryzyka utraty klienta. Recency i trend frequency są silnymi wskaźnikami.
  • Lookalike. Segment docelowy traktuj jako etykietę pozytywną w uczeniu nadzorowanym.
  • AutoML. W SageMaker Autopilot przekaż zbiór z RFM i metrykami zachowań. Autopilot wybierze algorytm i strojenie.

Integracje:

- Potraktuj segment jako feature w featurizerze. Zapisz zestaw cech do Feature Store.

- Eksponuj predykcje przez Endpoint, a RFM dołączaj w payload lub odczytuj z Feature Store w czasie inferencji.

Jak wdrożyć i aktualizować segmenty RFM w codziennej pracy?

Zautomatyzuj przeliczanie i dystrybucję segmentów do narzędzi marketingowych.

Praktyczny przepływ:

  • Dane źródłowe do S3. Zasilanie z ERP, platformy sklepowej lub DWH.
  • SageMaker Pipelines. Kroki Processing do filtrowania ektoiny i liczenia RFM. Opcjonalnie krok Training dla modeli skłonności.
  • Harmonogram. Uruchamianie przez EventBridge, na przykład co tydzień.
  • Publikacja. Zapis tabeli segmentów w S3 i widok w Athena. Replikacja do Redshift lub eksport do narzędzi kampanii.
  • Monitorowanie. Śledzenie liczby klientów w segmentach i wskaźnika powrotów. Alarmy dla nieoczekiwanych zmian.
  • Dokumentacja. Definicje progów i znaczeń segmentów dostępne dla zespołów marketingu i analityki.

Podsumowanie

RFM porządkuje bazę kupujących kosmetyki z ektoiną i przyspiesza decyzje. W SageMaker łączysz to z modelami, automatyzacją i jasnym raportowaniem, co realnie wspiera sprzedaż i retencję.

Kontakt

Skontaktuj się, aby wdrożyć segmenty RFM dla kosmetyków z ektoiną w SageMaker i zacząć działać na danych.

Chcesz poprawić retencję klientów kosmetyków z ektoiną? Przeczytaj, jak w artykule wyodrębniono segment „Lojalni użytkownicy ektoiny”, zmierzono dla niego wyższą stopę powrotów w okresie testowym i zweryfikowano skuteczność predykcji modelem (AUC): https://veolibotanica.pl/pl/parameters/ectoin-1472.html.