feature store

HanJu Han·2024년 12월 3일

추천 시스템

목록 보기
27/49

이커머스 추천에 사용되는 feature 예시

  1. 사용자 관련 피처

기본적인 사용자 정보:

# 사용자 프로필 정보
user_profile = {
    'user_id': 'user_12345',
    'age_range': '30-34',
    'gender': 'F',
    'location': 'Seoul',
    'membership_level': 'wow',  # 와우 멤버십 여부
    'signup_days': 730         # 가입 후 경과일
}

사용자의 쇼핑 행동 관련 피처:

# 쇼핑 행동 피처
shopping_behavior = {
    'avg_monthly_spend': 250000,    # 월평균 구매금액
    'frequent_categories': [        # 자주 구매하는 카테고리
        ('baby', 0.4),
        ('grocery', 0.3),
        ('fashion', 0.2)
    ],
    'price_sensitivity': 0.8,       # 가격 민감도 (높을수록 할인에 민감)
    'browse_time_pattern': {        # 주요 쇼핑 시간대
        'morning': 0.2,
        'afternoon': 0.3,
        'evening': 0.5
    }
}
  1. 상품 관련 피처

상품의 기본 정보:

# 상품 메타데이터
product_metadata = {
    'product_id': 'prod_789',
    'category_hierarchy': [
        'fashion',
        'women',
        'dress',
        'summer_dress'
    ],
    'brand': 'ZARA',
    'price': 39900,
    'is_rocket': True,           # 로켓배송 여부
    'seller_rating': 4.8,        # 판매자 평점
    'available_sizes': ['S', 'M', 'L']
}

상품의 성과 지표:

# 상품 성과 지표
product_performance = {
    'sales_rank': {              # 카테고리 내 판매 순위
        'overall': 123,
        'summer_dress': 5
    },
    'conversion_rate': 0.15,     # 구매전환율
    'review_metrics': {          # 리뷰 지표
        'avg_rating': 4.5,
        'review_count': 1280,
        'positive_ratio': 0.92
    }
}
  1. 협업 필터링 관련 피처

사용자-사용자 협업 필터링 점수:

# 사용자 기반 협업 필터링 점수
user_cf_scores = {
    'similar_users': [          # 유사한 사용자들
        ('user_789', 0.92),     # 92% 유사
        ('user_456', 0.87),     # 87% 유사
    ],
    'category_preferences': {    # 유사 사용자들의 카테고리 선호도
        'summer_dress': 0.85,
        'sandals': 0.72,
        'sunglasses': 0.65
    }
}

상품-상품 협업 필터링 점수:

# 상품 기반 협업 필터링 점수
item_cf_scores = {
    'bought_together': [        # 함께 구매된 상품
        ('prod_123', 0.85),     # 85% 연관성
        ('prod_456', 0.76)      # 76% 연관성
    ],
    'view_to_view': [          # 함께 조회된 상품
        ('prod_234', 0.92),
        ('prod_567', 0.88)
    ],
    'cart_to_cart': [          # 함께 장바구니에 담긴 상품
        ('prod_345', 0.95),
        ('prod_678', 0.89)
    ]
}
  1. 상호작용 관련 피처

사용자와 상품 간의 상호작용을 나타내는 피처:

# 상호작용 피처
interaction_features = {
    'explicit_feedback': {      # 명시적 피드백
        'rating': 5,            # 별점
        'review_text': '좋아요',  # 리뷰 내용
        'size_feedback': '정사이즈' # 사이즈 피드백
    },
    'implicit_feedback': {      # 암묵적 피드백
        'view_count': 3,        # 조회수
        'cart_add_count': 1,    # 장바구니 추가 횟수
        'wish_list': True,      # 찜하기 여부
        'view_duration': 180,   # 상품 페이지 체류시간(초)
        'click_sequence': [     # 클릭 시퀀스
            'image_zoom',
            'size_chart',
            'review_section'
        ]
    }
}
  1. 시간적 문맥 피처

시간에 따른 변화를 포착하는 피처:

# 시간적 문맥 피처
temporal_features = {
    'recent_behavior': {        # 최근 행동 (7일)
        'viewed_categories': [
            ('dress', 10),      # 드레스 10회 조회
            ('shoes', 5)        # 신발 5회 조회
        ],
        'search_keywords': [    # 최근 검색어
            '여름원피스',
            '샌들'
        ]
    },
    'seasonal_patterns': {      # 계절성 패턴
        'last_summer_purchases': [
            'dress',
            'sandals',
            'sunscreen'
        ],
        'category_seasonality': {
            'summer_dress': 0.9,  # 여름 시즌 연관성
            'winter_coat': 0.1
        }
    }
}

이러한 피처들은 각각의 특성에 맞게 다르게 관리됩니다:

  1. 온라인 피처 스토어 (실시간 업데이트)
  • 현재 세션의 클릭 기록
  • 장바구니 상태
  • 최근 검색어
  • 실시간 상품 재고 상태
  1. 오프라인 피처 스토어 (배치 업데이트)
  • 협업 필터링 유사도 매트릭스
  • 장기적인 사용자 선호도
  • 상품 카테고리 계층 구조
  • 판매자 신뢰도 점수

이러한 피처들을 효과적으로 활용하기 위한 핵심 전략들이 있습니다:

  1. 캐싱 전략
  • 협업 필터링 점수와 같이 계산 비용이 높은 피처는 적절한 주기로 미리 계산해서 캐싱
  • 실시간성이 중요한 피처는 인메모리 데이터베이스(예: Redis)에 저장
  1. 피처 조합
  • 단일 피처보다는 여러 피처의 조합이 더 좋은 성능을 보임
  • 예: "함께 구매한 상품" + "현재 세일 중인 상품" + "재구매율 높은 상품"
  1. 상황별 가중치 조정
  • 특가 세일 기간에는 가격 관련 피처의 가중치 증가
  • 신제품 출시 기간에는 트렌드 관련 피처의 가중치 증가

이러한 피처들을 체계적으로 관리하면서, 지속적인 A/B 테스트를 통해 각 피처의 효과를 검증하고 개선해나가는 것이 중요합니다. 특히 협업 필터링 점수는 주기적으로 재계산되면서도 실시간 피드백을 반영할 수 있는 구조로 설계되어야 합니다.

profile
시리즈를 기반으로 작성하였습니다.

0개의 댓글