OpenAI Assistant API는 openapi에서 모델을 활용해서 개발하게 하는 API인데 2023 말에 Beta V1을 발표했습니다.
하지만 몇가지 단점과 한계, 버그가 있었는데 새 버전 2가 발표되었습니다.
간략한 요약은 다음과 같습니다.
2024년 4월 발표. OpenAI Assistants API의 기본 버전에 새로운 기능과 개선 사항을 넣어 OpenAI-Beta: assistants=v2 릴리즈로 만듦
파일 검색 도구 개선: ‘file_search’ 도구는 이전보다 500배 많은 최대 10,000개 파일을 처리할 수 있습니다. 이 도구는 검색 속도가 빠르고, 멀티 스레드 검색을 통한 병렬 쿼리를 지원하며, 향상된 재정렬 및 쿼리 재작성 기능을 제공합니다. 기능 개선 및 신규 지원
벡터 스토어 객체 도입: 파일이 벡터 스토어에 추가되면 자동으로 파싱, 청킹, 임베딩되어 검색 준비가 완료됩니다. 벡터 스토어는 여러 보조기와 스레드에 걸쳐 사용할 수 있어 파일 관리와 결제가 간소화됩니다. 신규 지원
토큰 사용 최대치 제어: 실행할 때 사용하는 최대 토큰 수를 제어할 수 있어 토큰 사용 비용을 관리할 수 있습니다. 또한, 각 실행에서 사용되는 이전/최근 메시지의 수에 대한 제한을 설정할 수 있습니다. 신규 지원
도구 선택 매개변수 지원: 특정 실행에서 특정 도구(예: file_search, code_interpreter 등)의 사용을 강제할 수 있는 ‘tool_choice’ 매개변수를 추가했습니다. 신규 지원
역할이 보조인 메시지 생성 가능: Threads에서 사용자 정의 대화 이력을 생성할 수 있습니다.
보조 및 실행 객체의 모델 구성 매개변수 지원: 인기 있는 모델 구성 매개변수(온도, 응답 형식(JSON 모드), top_p 등)를 지원합니다. 신규 지원
미세 조정 모델 사용 가능: 현재는 gpt-3.5-turbo-0125의 미세 조정 버전만 지원됩니다. 신규 지원
스트리밍 지원: Assistants API가 이제 스트리밍을 지원합니다. 신규 지원
스트리밍 및 폴링 도우미 추가: Node 및 Python SDK에 여러 스트리밍 및 폴링 도우미를 추가했습니다. 신규 지원
마이그레이션 가이드 제공: 최신 버전의 Assistants API로 도구 사용을 마이그레이션하는 방법에 대해 자세히 알아볼 수 있습니다. 신규 지원
사실 비율 보다는 샘플의 크기가 중요하지만 어쨌든 95%대 5%로는 A/B테스트는 문제를 만듭니다.
A/B테스트 흔히 온라인서비스에서는 버킷테스트라고 하는데 이 테스트에서 A와 B 두개의 샘플의 수가 서로 불균등하다고 하면 대부분의 통계학자들은 표정이 안좋아지며 심각하게 생각하지만 개발자들은 별것 아니라고 생각합니다.
이게 논란의 여지가 항상 있는 것이므로 조심스럽지만
A/B테스트는 통계학에서 나온 것이므로 통계학자들이 더 잘 알것이므로 이쪽을 더 신뢰하는 것이 맞습니다. 통계학자들은 경험과 이론을 통해 그게 왜 문제인지 설명하지만 개발자들은 그런 설명을 하지 않습니다.
개발자들은 근거를 말하지 않지만 통계학자들은 근거를 말합니다.
A/B 테스트, 버킷테스트는 여러개의 샘플에 각기 다른 처치(작용 또는 변화를 주는것)를 하고 그게 정말 효과가 있는 지 살펴보는 것이라는 것을 기억해야 합니다.
A/B 테스트는 샘플이 중요하다
A/B 테스트는 통계학에서 다루는 실험 운영 방법입니다. 실험계획법이라는 통계학 과목이 있습니다. 과목이 따로 있을 만큼 만만한 것이 아닙니다
통계학은 샘플을 매우 중요하게 생각합니다. 적어도 통계학파 중에 빈도주의자(Frequatist)들은 매우 중요하게 생각합니다. 그와 비교되는 다른 학파들도 있지만 이건 다음에 얘기하겠습니다.
샘플은 어떤 집합에서 일부를 떼어 낸 것을 말합니다.
통계학에서 샘플을 중요하게 생각하는 이유는 샘플을 통해서 원래 전체 데이터의 특성을 파악해야 하기 때문입니다. 샘플을 사용해서 원래 집합을 알아내려고 하는 이유는 대부분의 전체 데이터를 다 확인하는 것은 불가능하기 때문입니다.
“빅데이터 플랫폼도 있는데 전체데이터 확인을 왜 못하냐?” 라고 물어볼 수 있습니다. 잘못 이해한 것인데 거기서 말하는 전체데이터는 실제로 알고자 하는 사실을 얻어야 하는 대상의 전체가 아니기 때문입니다. 예를 들어서 어제까지 가입한 쇼핑몰 전체의 고객 데이터는 전체 데이터가 맞긴 하지만 쇼핑몰의 고객 전체는 아닙니다. 앞으로도 가입할 사람이 있을 것이고 탈퇴할 사람도 있을 것이기 때문입니다. 그런 관점에서 통계학에서 생각하는 전체 데이터를 얻는 것은 불가능하다고 할 수 있습니다.
어제까지 전체 고객 데이터는 통계학에서는 전체데이터가 아닌 그냥 매우 큰 샘플데이터입니다.
A/B테스트에서 A와 B는 각각 전체 모집단에 대한 샘플이라고 봅니다.
A/B테스트에서 샘플 수가 균등하지 않으면 통계 검정을 할 수 없는가?
그래서 A/B의 비율이 5:5로 균등하지 않으면 정확한 비교를 하지 못하는가? 라는 의문이 있을 것이다. 할 수는 있습니다. 다만 꽤 복잡한 방법을 써야 하고 정확하지 않은데다 선택한 검정 자체를 적용하는 것 자체가 맞는지 안맞는지는 확인하려고 하는 것은 노련하고 뛰어난 통계학자도 매우 어렵게 하는 것입니다.
간단하게 공식 몇 개 넣어서 계산하면 되는 것이 아닙니다.
그래서 이렇게 불균등한 샘플 비교를 최대한 피해야 합니다.
샘플 간의 성능 비교를 한다면 균등한 것이 낫다
균등하지 않은 샘플로 샘플의 불균형성을 극복하면서 테스트하는 것 보다 균형 샘플을 만들어서 테스트하는 것이 더 쉽고 돈도 더 적게 듭니다. 균등하지 않은 샘플로 서로를 비교하는 것은 일반적으로 실험계획이 잘못된 경우나 하지 못한 후시 테스트일 가능성이 높습니다.
A/B 테스트와 관련되었대고 하면 무조건 샘플 수를 맞추고 시작합니다.
불균등한 것이 뭐가 그리 문제인가?
샘플이라고해서 그렇게 거창한 것은 아닙니다. A그룹에서 추출한 숫자들, B그룹에서 추출한 숫자들을 비교하는 것인데 샘플이 균등하지 않으면 크게 달라질 수 있는 것이 파라미터(모수, parameter)인데 평균과 분산입니다. A/B테스트는 A와 B의 평균과 분산이 실험 후에 많이 차이가 나는지 아닌지를 보는 것입니다. 이때 샘플의 수 그러니까 숫자의 갯수가 많이지면 숫자의 갯수가 적을 때 보다 분산은 무조건 커집니다. 이게 자연적인 현상입니다. 그래서 샘플의 수가 50대 50으로 균등하지 않으면 샘플 수로 인해서 생길 수 있는 기본적인 분산의 차이를 보정하고 검정을 해야 하는데 보정이 매우 어렵고 보정을 해도 정확도가 떨어집니다.
실험결과를 잘못 해석하게 됩니다. 이런 결과로 결정을 하면 비즈니스에 큰 실패를 가져올 수 있습니다.
실험 자체를 잘못하는 것은 그 실험을 없었던 것으로 하면 되기 때문에 피해가 덜하지만 결과를 잘못해석하면 틀렸다는 것 자체를 의심하지 않기 때문에 큰 문제를 생깁니다.
한쪽을 언더샘플링(Under sampling)을 하면 어떤가?
크기(갯수)가 다른 두 샘플들이 있을 때 크기가 적은 샘플 수만큼을 크기가 큰 색플에서 도려내서 숫자를 맞추는 것이 언더샘플링(under sampling)이라는 방법입니다. 간단히 말하면 그냥 큰 쪽을 작은쪽의 크기 만큼 잘라서 맞추는 것입니다. 보통 자를 때 무작정 자르지 않고 랜덤으로 샘플링을 합니다. (확실하게 랜덤으로 분할 한 것과 같은 것으로 분할 할 수 있으면 랜덤 샘플링을 하지 않아도 됩니다. 이건 따로 설명하지요)
어쨌든 이러면 괜찮지 않은가? 라고 생각할 수 있는데 이것도 괜찮지 않습니다.
언더샘플링을 하는 순간 샘플의 모집단이 달라지게 됩니다. 샘플이 뽑힌 것의 자유도라는 것도 다르기 때문에 두 샘플은 비교하기 어렵게 됩니다. 부모가 낳은 형과 동생을 비교하다가 형과 동생의 아들인 조카를 비교하는 꼴인 것이다. 부트스트래핑을 쓰면 하게되면 이러 불균형에서 샘플링을 통해 문제를 해결할 수 있지만 역시 그 보다는 샘플 수를 맞추는게 편하고 낫습니다.
대부분의 버킷시스템은 샘플 수를 맞추도록 설계되어 있다
빅테크 회사들의 버킷시스템이 존재합니다. A/B테스트를 할 수 있도록 플랫폼이 갖춰줘 있고 샘플의 수 등을 수정할 수 있습니다. 저런 대형 기업들의 시스템에서도 기본으로 두 비교군의 샘플 수를 맞추도록 설계되어 있습니다. 다른 대기업들도 모두 마찬가지입니다. 그들은 왜 모두 그렇게 하는지 생각을 해보기로 합시다. 그냥 그렇게 하거나 단순한 전통이어서 그렇게 하는 걸이다 아닙니다. 그것이 통계적이고 과학적으로 실험의 결과를 오해석하지 않는 최선의 방법이기 때문입니다.
통계학자들이 무능하고 실력이 없으면서 복잡해 보이기 좋아하기 때문에 저렇게밖에 못한다고 생각할 수도 있지만.
버킷시스템에서는 언더샘플링이 가능하다
추가로 말하면 대부분의 버킷시스템은 사용자의 ID 또는 비식별ID를 비트연산을 통해 그룹을 나눠서 관리하도록 되어 있습니다.
따라서 많은 쪽의 비트 몇개를 무시해서 언더샘플링을 하면 샘플비교를 할 수 있습니다. 조금 복잡하니 자세한 것은 따로 설명하겠습니다.
참고
A/B테스트에 대해 포스트를 올린적이 있습니다. 시간이 있다면 자세한 내용은 그걸 참조하세요.
CTR은 Click Through Rate 입니다. 클릭수/노출수x100으로 계산하는데 짧게 말하면 노출대비 클릭수의 비율이라고 할 수 있습니다. 검색결과 또는 추천시스템의 성과를 확인하기 위한 가장 기본적인 지표로 많이 쓰입니다.
본론으로 들어가서 광고 노출, 검색 결과를 잘 조절해서 CTR을 획기적으로 올리는 방법은 별로 없습니다.
보통 제안하는 상품이나 검색 결과가 오디언스(사용자 또는 고객)의 관심을 끌지 못하면 CTR은 떨어집니다. 관심이 없으면 클릭을 하지 않기 때문입니다.
이커머스에서도 CTR은 매우 중요합니다. 이커머스에서는 추천상품 모듈이 있어서 검색이나 특정 상품을 볼 때 다른 추천 상품을 제안해서 구매를 유도합니다. 그 외에 검색해서 나오는 상품들도 사실상 추천이라고 할 수 있습니다. 검색 결과도 원칙적으로는 추천입니다.
추천시스템(Recommendation system)을 업그레이드 해서 개선에 성공한다면, 그리고 CTR을 올리면 과연 매출이 올라가느냐?라는 의문을 가질 수 있습니다. 이게 정말 그러냐는 것인데
답: 그럴 수도 있지만 아닌 경우가 더 많습니다.
우선 개발자 또는 ML엔지니어가 가장 많이 착각하는 것이 “CTR을 올리면 당연히 매출도 올라가겠지” 라고 단정해서 짐작하는 것입니다. 하지만 이 짐작은 그 자체로는 과학적 근거가 없습니다. 게다가 CTR은 비즈니스 업종, 제품 카테고리(품목), 시즌에 따라서 각기 다른 양상을 보입니다. 매우 복잡하지요.
더 구체적으로 설명하면
상품 노출 후 구매까지의 단계는 추천 상품 노출 -> 클릭 -> 구매 로 됩니다.
그리고 클릭율과 전환율의 정의를 보면
노출 -> 클릭으로 가는 비율을 계산한 것이 CTR (클릭율) 클릭 -> 구매로 가는 비율을 계산한 것이 CVR (전환율)
다시 원래의 질문으로 돌아가서 CTR을 높이면 매출이 정말 올라가느냐?가 맞으려면 CTR을 올리고 CVR이 그대로 이거나 증가해야 합니다.
CTR이 많이 올라갔으면 CVR은 오히려 조금 떨어져도 됩니다. 높은 CTR이 CVR의 감소를 만회해 줍니다.
하지만
모델을 개선해서 CTR을 올렸는데 CVR이 줄어드는 경우가 꽤 많이 생깁니다. CVR과 CTR이 음의 상관관계를 가지는 경우가 많기 때문입니다. 이것 때문에 분명 CTR은 높아졌는데 정작 매출이 늘지 않게 됩니다.
그래서 이것이 클릭예측모델(클릭 모델)을 만든 후에 구매예측모델을 만드는 발단이 되기도 합니다. 구매예측모델은 더 만들기 어렵고 잘 안됩니다. 이것은 나중에 따로 얘기하기로 합니다.
마케팅과 행동과학 측면에서 생각하는 것을 고려해야 합니다.
CTR이 오른다는 것은 사람들이 추천한 제품에 관심을 많이 보였다는 것입니다. 그런데 사람들에게 많은 관심을 받는 제품이 반드시 잘 팔리는 제품은 아닙니다. 예를 들어 “휘어지는 4K 200인치 TV” 같은 것은 많은 사람들에게 관심을 갖도록 할 수 있지만 구매하는 사람은 많지 않습니다. “생글생글 생수” 이런 생수는 사람들의 관심을 끄는 제품이 아니라서 CTR은 낮지만 CVR은 매우 높은 제품입니다.
TV는 고관여제품이고 생수는 저관여제품입니다.
고관여제품: 사는데 고민을 많이 하고 비싼 제품. 구매 후 실패하면 위험 부담이 큰 제품 저관여제품: 사는데 고민을 적거 하고 싼제품. 구매 후 실패를 걱정하지 않는 제품
사람들은 생수에 대해서 잘 알고 있고 동일한 제폼이나 유사한 제품을 반복해서 구매합니다. 그래서 이런 저관여제품의 구매는 망설임이 없이 구매합니다.
이외에도 여러 문제가 있다. 그래서 추천시스템의 성과를 단순히 CTR로 측정해서는 안되고 추천해서 사람들이 클릭한 것만으로 모델의 가치평가를 하게 되면 모델을 론칭하고 나서 비즈니스에서는 실제 개선이 없는 상황을 맞이 하게 됩니다.
추천시스템의 모델링에 집착해서 기계학습 모델의 개선에만 몰두하는 곳이 매우 많은데 위와 같이 실제 비용효율이 나지 않는 경우를 많이 보았습니다. 대부분의 모델을 새 알고리즘으로 교체하거나 피처 엔지니어링을 통해 개선하고 나면 아주 적은 CTR의 개선을 볼 수 있겠지만 전체 매출에는 통계적으로 무의미한 미미한 증가만 얻게 됩니다.
비용효율이 안나오게 되고 이런 일이 반복되면 비즈니스 담당자로부터 모델과 기술자는 신뢰를 잃게 됩니다.
무작정 CTR을 올리는 모델을 잘 만들기만 하면 비즈니스는 대박이 나고 나는 스타가 될 수 있을꺼야 라고 생각하는 MLE나 데이터과학자가 많습니다.