Hong의 모든 글

R언어 “Happy New Year 2022″를 출력하는 재밌는 코드

“Happy New Year 2022″를 출력하는 재밌는 코드입니다.

코드를 실행해 보세요.

seeds <- c(2219868, 10641, 443238, 9487)
word_lengths <- c(5, 3, 4, 4)
choices <- list(letters, letters, letters, 0:9)

magic_message <- function(seed, word_length, choices) {
  set.seed(seed)
  sample(choices, size = word_length, replace = TRUE) |>
    paste(collapse = "") |>
    stringr::str_to_title()
}

purrr::pmap_chr(list(seeds, word_lengths, choices), magic_message) |> cat()

버킷테스트 Bucket test

버킷테스트는 인터넷 사이트나 앱에서 흔히 하는 환경을 분리한 사용자 군을 대상으로 한 실험을 말합니다.

버킷테스트는 A/B테스트와 밀접한 관계가 있고 동일한 용어로 취급하기도 합니다.

그러니 A/B테스트에 대해서 잘 모른다면

예전에 A/B 테스트에 대해서 포스팅한 것이 있으니 먼저 참고하시기 바랍니다.

A/B 테스트 포스팅 글 👈

버킷테스트 개념

두 개의 양동이에 실험할 대상을 따로 떠내서 실험을 다르게 하던 것에서 출발한 것입니다.

버킷 = Bucket = 양동이

왜 버킷테스트라고 부르나?

버킷테스트는 사실상 A/B테스트와 거우 동일한데 A/B 테스트라고 하지 않고 버킷테스트라고 하는 이유가 있습니다.

A/B테스트는 원래 실험환경을 갖추고 통제된 환경에서 실험을 시작하지만 버킷테스트는 통제되지 않은 상황의 군집에서 일부를 꺼내서 실험을 하기 때문에 버킷테스트라고 부릅니다.

어떻게 하나?

예를 들어 설명해 보겠습니다.

먼저 실험설계를 합니다.

실험설계

유명한 포털사 네이박은 자신들이 운용하는 포털페이지의 기본 글꼴을 “맑은 고딕”에서 “탁한 고딕”으로 바꾸려고합니다. 이유는 “탁한 고딕”이 가독성이 더 높고 편안해서 사용자들이 글을 더 빨리 이해하고 클릭도 많이 할 것이라는 의견이 나왔기 때문입니다.

버킷테스트 진행

  1. 포털에 접속하는 사용자에게 발행한 쿠키를 기준으로 A그룹과 B구그룹으로 완전하게 분리할 수 있는 두 그룹을 만듭니다. 실험을 하는 동안 A그룹과 B그룹의 멤버들이 변화가 있어서는 안됩니다.
  2. A그룹은 전체 사용자의 1% B그룹은 전체 사용자의 1% 동일하게 하고 나머지 98%의 사용자는 내버려둡니다.
  3. 1%라는 수치는 포털의 전체 사용자수에 따라 달라지며 검정력 테스트라는 방법으로 필요한 샘플수를 알아낼 수 있습니다.
  4. A그룹은 내버려두고 B그룹이 보는 페이지에만 “맑은 고딕” 대신에 “탁한 고딕”을 적용합니다.
  5. 실험을 3주정도 진행합니다.
  6. 실험기간 동안 두 그룹의 클릭한 수, 페이지당 체류시간, 페이지 뷰 수 등 필요한 수치를 모두 뽑아냅니다.
  7. 가설검정을 통계적인 검정법으로 테스트합니다.
  8. B그룹의 클릭수 또는 클릭율이 더 높다면 대립가설 채택합니다.
  9. 전체 사용자를 대상으로 사이트의 폰트를 “탁한 고딕”으로 바꿉니다.

실험이 끝난 후에는 통계적 평가를 그대로 따르면 됩니다.

여기에서 가장 중요것은 A와 B그룹이 동일한 숫자여야 하고 서로 섞이지 않아야 하며 완전히 통제되야 한다는 것입니다.

A/B 테스트

A/B 테스트의 대해서 포스팅합니다.

무척 많이 쓰는 용어지만 잘 모르는 분들이 많습니다.

특히 A/B 테스트는 어설프게 알면 크게 당하기 쉽습니다. 만만해 보여도 개념을 잘못 잡으면 큰 착각을 하게됩니다.

개념

A/B 테스트는 A와 B가 유의미한 차이가 있는지 검정한다는 뜻입니다.

통계학에서 다루는 개념이며 실험입니다.

A와 B의 의미는 대조군을 A, 실험군을 B라고 의미없이 붙이는 것에서 나온 것입니다.

대조군은 원래 상태에 있는 것을 말하고

실험군은 원래 상타에서 뭔가를 바꾼 것을 말합니다.

알기 쉬운 예

콩발의 첨가물 테스트라는 아날로그식 예를 들어보겠습니다.

이 예제 테스트의 목적은

콩밭에 새로운 첨가물을 주고 이 첨가물이 전에 쓰던것 보다 더 콩의 수확량을 늘리는지 확인하려고 합니다.

다음과 같이합니다.

  1. 콩밭 1000제곱비터가 2개 있고 하나를 A 하나를 B라고 이름 붙입니다.
  2. A와 B에 동일한 종자의 콩을 심습니다. 다른 것 심으면 실험은 망합니다.
  3. A에는 원래 쓰던 첨가물을 쓰고 B에는 새로 개발한 첨가물을 씁니다.
  4. 동일한 조건으로 콩을 키웁니다. 물도 똑같이 주고, 햇빛도 똑같이 쬐게하고, 땅도 동일하게 다져줍니다.
  5. 콩을 수확합니다.
  6. A와 B에서 각각의 콩들을 무작위로 동일한 양을 꺼내서 무개를 잽니다. 무작위로 꺼내는 것이 싫으면 가능하다면 다 꺼내서 재도 되지만 그렇게 하는 경우는 없습니다.
  7. A와 B의 콩무게가 유의미한 차이가 있는지 확인합니다. 이걸 가설검정이라고 합니다.
  8. B의 콩무게가 더 무겁다면 B에 사용한 비료를 다음에 씁니다.

통제된 상태라는 것의 의미

여기서 중요한 것은

A와 B 모두 통제된 상태여야 합니다. 이 뜻은 A와 B가 콩을 기르는 동안 한쪽은 티가 많이 오고 한쪽은 그늘이 져서 햋볕이 잘 들어오지 않거나 하는 불평등한 상황이 되면 안된다는 것이고 첨가물을 다르게 준 것 외에는 조건이 동등해야 하는 것을 말합니다.

A와 B의 개체수가 동일해야 함

A와 B의 콩줄기의 숫자가 동일해야 합니다. 하지만 그러기는 매우 어려우니 대충 콩밭의 사이즈라도 동일해야 합니다. 한쪽이 크거나 하면 그것으로 인해서 콩의 수확양이나 성장 조건이 달라질 수 있기 때문입니다.

콩밭의 사이즈는 통상 한쪽이 다른 한쪽의 2%가 넘지 않게 합니다.

실험이 끝나면 가설검정을 해야 함

사실 B 콩밭에 첨가물을 다른 것을 준 이유는 콩 수확량이 증가할 것이라는 기대 때문입니다.

통계학에서는 귀무가설과 대립가설이라는 것을 정의하고 그것으 실험의 결과를 판단합니다.

여기에서 귀무가설은 A의 콩무메가 B의 콩무게와 차이가 없다.

대립가설은 B의 콩무게가 A의 콩무게와 차이가 있다.

이렇게 합니다.

여기서 실험결과가 귀무가설에 맞는지 대립가설에 맞는지를 확인하는 것을 가설검정이라고 합니다.

가설검정 공식

가설검정을 확인할 때는 공식이 있습니다.

무작정 A와 B에서 무작위로 콩을 골라서 무개를 재서 한쪽이 더 많은지 똑같은지 비교 하는 것은 안됩니다.

그렇게 하면 대부분의 경우 미세하게나마 한쪽의 콩무게가 더 무겁습니다.

쓸모없는 실험입니다.

상식적으로 생각해도 그게 정말 오류가 많을 수 있다는 것을 알 수 있습니다.

그래서 통계적으로 그 차이가 유의미한지 아닌지를 보는 연구된 방법을 쓰는데 그 방법은 매우 다양하고 많습니다.

그래서 각 상황에 맞게 어떤 통계적 검정 방법을 사용해야 하는지와 지켜야 할 것을 알아야 하는데 그걸 공부하는 학문이 통계학입니다.

위의의 콩무게와 같은 것은 스튜던트의 T테스트라는 테스트 공식으로 확인합니다.

스튜던트의 T테스트는 한쪽 집단의 평균과 다른 한쪽의 평균이 유의미한 차이가 있는지 의미없는 차이만 있는지 확인하는 유명한 방법입니다.

스튜던트의 T테스트는 엄청나게 유명한 테스트 방법입니다.

공식은 검색해서 찾아 보면 잘 나오므로 복잡하게 여기에서 설명하지 않겠습니다.

엑셀, Python, R을 비롯한 많은 통계 소프트웨어에 이런 가설검정법은 대부분 내장되어 있습니다.

Froala HTML 에디터

웹페이지에서 사용하는 콘텐트 편집기로 TinyMCE라는 유명한 것이 있습니다.

워드프레스를 포함한 많은 웹상의 편집기들이 이 편집기를 씁니다.

https://www.tiny.cloud/

TinyMCE 대안으로 Froala 라는 것이 있어 소개합니다.

https://froala.com/

장점

가볍고 깔끔합니다.

여러 플랫폼에 연동이 됩니다.

단점

자료가 많지 않아 문제가 생겼을 때 해결책을 찾기 어렵습니다.