영단어 Facet은 보석세공후 한 단면을 의미. Solr에서는 여기서 하나의 측면이라는 의미를 따 왔다.

페이싯 기능은 통계적 정보를 검색결과에 추가한다고 이야기할 수 있으며, 사용자가 대량의 데이터 속에서 필요한 정보를 빠르고 정확하게 찾을 수 있도록 도와주는 강력한 도구로 활용될수 있다.

 

 

솔라검색 예시

검색: http://localhost:8983/solr/컬렉션명/select?q=과학&facet=true&facet.field=장르

출력:

{
  "responseHeader":{
    "status":0,
    "QTime":10
  },
  "response":{"numFound":123,"start":0,"docs":[
      {
        "제목":"천체물리학 입문",
        "저자":"스티븐 호킹",
        "장르":"천문학",
        "가격":20000
        // 기타 도서 정보
      },
      // 검색된 다른 책들의 정보
    ]
  },
  "facet_counts":{
    "facet_fields":{
      "장르":[
        "천문학", 34,
        "생물학", 29,
        "물리학", 20,
        "지질학", 10,
        // 기타 장르 및 해당 장르의 책 개수
      ]
    }
  }
}

위에서 facet_counts부분이 facet과 관련되어 추가된 부분이다.

 

가격관련 facet예시

검색: http://localhost:8983/solr/컬렉션명/select?q=노트북&facet=true&facet.range=가격&facet.range.start=0&facet.range.end=2000000&facet.range.gap=500000

q=노트북: "노트북"이라는 키워드로 검색합니다.
facet=true: 페이싯 기능을 활성화합니다.
facet.range=가격: "가격" 필드를 기준으로 범위 페이싯을 적용합니다.
facet.range.start=0: 가격 범위의 시작을 0원으로 설정합니다.
facet.range.end=2000000: 가격 범위의 끝을 2,000,000원으로 설정합니다.
facet.range.gap=500000: 가격 범위의 간격을 500,000원으로 설정합니다.

 

출력:

{
  "responseHeader":{
    "status":0,
    "QTime":15
  },
  "response":{"numFound":250,"start":0,"docs":[
      {
        "제품명":"모델 A 노트북",
        "브랜드":"브랜드X",
        "가격":1500000
        // 기타 제품 정보
      },
      // 검색된 다른 노트북들의 정보
    ]
  },
  "facet_counts":{
    "facet_ranges":{
      "가격":{
        "counts":[
          "0-500000", 25,
          "500000-1000000", 75,
          "1000000-1500000", 100,
          "1500000-2000000", 50
        ]
      }
    }
  }
}

 

 

반응형

'Programming > Data Engineering' 카테고리의 다른 글

Solr - payload  (0) 2024.01.16

feature가 가질 수 있는 값의 종류.

 

예를 들어 성별은 남자/여자 둘중의 하나이므로 카디널리티가 2이다.

카테고리의 경우 가구/가전/의류 등 세가지 범주를 갖는다면 카디널리티가 3이다.

방의 개수는 대략 1에서 10사이이므로, 이 경우 카디널리티가 10이다.

고객ID/제품SKU등의 경우 매우 높은 카디널리티를 갖는다.

 

위내용까지는 이해가 쉬운데, 연속형 수치를 갖는 feature의 카디널리티는 판단하기 까다로울 수 있다.

예를 들어 일별수익률, 집의 면적, 제품의 가격등이다.

 

수치형 데이터의 카디널리티 판단:

  • 소수점 2자리에서 끊던지 하는 방법으로 어느정도 양자화하고
  • SQL쿼리에서 COUNT(DISTINCT colume)으로 카니널리티 측정

예를 들어 온도보다는 인구수가 카니널리티가 높을것이다.

 

 

반응형

여기 참조

 

개요

일별수익률등 거의 0이 나타나지 않는 feature를 dense feature라고 한다.

원핫 인코딩을 거친 범주형 데이터처럼 0이 매우 많이 나타나고 드물게 0이 아닌 1등이 나타나는 feature를 sparse feature라고 한다.

(원핫 인코딩 여부가 판가름하는 지표가 되기도 한다)

 

한가지 주의할것은 업데이트 주기로 판단하지는 않는 다는 것이다.

예를 들어 GDP값이라는 feature가 있을때, 값은 1년내 거의 고정이지만 이를 sparse feature라고 하지는 않는다. (값의 대부분이 0이진 않기 때문에)

 

모델

XGBoost: 주로 연속적인 수치형 feature(dense feature)에 강점을 가지며, 트리 기반 모델은 feature의 분할을 통해 비선형 관계를 잘 포착함. sparse feature를 사용할때는 카디널리티(cardinality, 고유값의 수)가 높지 않고 연속성이 어느정도 의미가 있는 경우에 효과적.

 

딥러닝모델: dense feature와 sparse feature모두를 효과적으로 처리. sparse feature는 임베딩을 통해 dense vector로 변환되어 처리함.(특히 NLP등에서 중요)

 

즉, 카디널리티가 높지 않은 경우는 XGBoost도 어느정도 sparse feature를 처리할 수 있지만, 카디널리티가 높은 경우는 딥러닝이 임베딩을 통한 기술이 있어서 더 유리하다고 하는 것.

 

 

반응형

'AI, ML > ML' 카테고리의 다른 글

문자열을 벡터로 바꾸는 방법1 - CountVectorizer  (0) 2024.03.12
cardinality  (1) 2024.01.07
binning  (0) 2023.12.28
디시전트리기반 코드 실습  (0) 2023.10.16
그레디언트 부스팅 (Gradient Boosting)  (0) 2023.10.15

+ Recent posts