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/

장점

가볍고 깔끔합니다.

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

단점

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

네이버 블로그 검색 C-rank

네이버 블로그는 많은 디지털마케터들의 마케팅 도구, 수단이 되어 왔습니다.

한국에서 가장 큰 검색 포털이 네이버이고 그 다음이 카카오의 다음검색이기 때문입니다.

블로그 글을 작성해서 조회수를 올리고 어떤 상품이나 제품을 한국사람에게 보여줘서 광고나 홍보의 목적으로 노출하려면 네이버에 블로그를 올려야 합니다.

올린 글을 사람들에게 잘 검색되서 보여지고 검색 결과의 상단부에 위치할 수 있게 관리하는 것을 SEO(Search Engine Optimization, 서치엔지최적화)라고 합니다.

그리고 이런 SEO에 가장 효과가 좋은 것은 사상실 스팸(SPAM) 기술입니다.

이런 스팸성 기술을 방어하기 위한 노력은 오래전에 시작되었습니다.

세계 최고의 검색회사인 구글의 검색 결과의 랭킹은 유명한 PageRank 알고리즘에서 출발했습니다.

거기에 비해 네이버는 너무 오랫동안 검색 기술에 투자를 하지 않았고 구글의 기술력과 규모가 급속도로 발전하는 사이에 그 격차가 너무나 멀어졌습니다.

그리고 전통적으로 검색에서 사용되었던 단순한 TF/IDF나 콘텐트 기반의 검색 링킹으로는 SEO를 잘 알고 경험도 많은 블로거, 마케터, 콘텐츠 관리자들을 상대하기 버거워졌습니다.

그래서 네이버는 C-rank 알고리즘을 만들어 블로그 검색에서 Creater의 신뢰도를 검색랭킹의 자질(feature)중 하나로 사용하게 됩니다.

사실 구글의 페이지랭크는 콘텐트의 영향력을 기반으로 랭킹을 계속 업데이트하기 때문에 생산자의 신뢰도가 약하게 나마 그 자체에 포함되어 있다고 볼 수 있습니다. 물론 지금은 그보다 훨씬 복잡하고 많은 자질과 알고리즘을 쓴다고 알려져 있어 저렇게 단순하지 않을 것입니다. 하지만 네이버는 그런것조차 되어 있지 않았다는 것입니다.

어쨌든 네이버의 블로그글은 C-rank를 사용하기 때문에 이제 단순히 인기 키워드가 사람들이 검색을 많이 할 것 같은 키워드로 상위에 위치하는 것은 이미 어렵게 되어 있고 꾸준히 콘텐트를 올리고 사람들의 조회수를 늘려서 작성자의 신뢰도 점수를 올리지 않으면 블로그 콘텐츠를 상위에 노출하는 것은 어렵다는 것입니다.

그래서 네이버의 블로그 마케팅을 하려면 C-rank 알고리즘을 이해해야 합니다.

네이버 C-rank에서 사용하는 자질

오래전의 내용이기 때문에 지금과 많이 다르겠지만 아래의 표에 있는 것이 네이버 C-rank에서 사용하는 항목들입니다.

아래의 자질들이 나타내는 것을 요약해보면 스팸성 글들은 하위에 위치하도록 하겠다는 의도가 보입니다.

어떤 플랫폼이나 서비스에서도 스팸은 서비스의 품질을 떨어뜨리는 것입니다. 하지만 무작정 필터링할 수도 없는 것이 문제입니다. 그래서 결국 스팸 콘텐츠는 랭킹을 떨어뜨려 하위에 보이게 하도록 하는 거이 가장 좋은 방법입니다.

네이버의 C-rank 자질을 보면 그런 의도가 보입니다.

네이버 C-rank 때문에 블로그 마케팅은 불가능한가?

많은 블로그 마케터들이 여전히 성과를 내고 있습니다. 바꿔 말하면 방법이 있으며 여전히 C-rank가 방어하지 못하는 구멍이 있다는 것입니다.

이 방법에 대해서는 나중에 포스팅을 해보겠습니다.

네이버 C-rank 블로그 글

https://m.blog.naver.com/naver_search/220774795442