- 개념 

Recency 얼마나 최근에 구매했는가?

Frequency 얼마나 자주 구매했는가? 

Monetary 얼마나 많은 금액을 지출했는가?  의 약자로

즉, 사용자별로 얼마나 최근에, 얼마나 자주, 얼마나 많은 금액을 지출했는지에 따라

사용자들의 분포를 확인하거나 사용자 그룹(또는 등급)을 나누어 분류하는 분석 기법입니다.

 

- 필요성

고객 세분화를 통해 마케팅 전략을 수립할 수 있습니다.

고객들의 구매행동에 따라 그 그룹을 세분화할 수 있으며 고객의 특성과 선호도에 다라 맞춤형 마케팅 전략을 수립하는데 도움이 됩니다.

 

- 유의사항

1. 지속적인 업데이트 

고객의 구매 행동은 시간에 따라 변화할 수 있으므로, RFM 분석은 지속적으로 업데이트 되어야 합니다. 새로운 데이터를 수집하고 분석을 수행하여 최신의 고객 세분화를 유지해야합니다.

 

- 고려해야할 점

비즈니스의 성격에 따라, 상황에 따라 알맞은 기준을 세우면 됩니다. 대표적으로 서비스마다 다르게 적용이 가능한 요소들은 아래와 같습니다.

1. Recenct, Frequencty, Monetary를 각각 몇단계로 나눌것인가

2. Frequency, Monetary를 집계하는 기간을 어떻게 설정할 것인가

 

기준을 정하는 방법은 유연하게 사고하여 정하는 방법이 가장 좋습니다.

상황에 따라 R-F-M 분석중 한가지를 제외하고 분석에 적용할 수 있습니다.

 

- 정리

1. RFM은 고객을 세분화하여 마케팅 전략을 수립할 수 있게 도와주는 도구입니다.

2. RFM은 기준을 나누는 것이 중요하지만 그 기준을 세우는데 유연하게 사고하여야 합니다.

-> 분석의 목적이 없이 수치화하여 나누려고 한다면 분석의 기준을 잃을 수 있습니다.



-참조 문서 

https://datarian.io/blog/what-is-rfm

 

'데이터분석 > 분석방법론' 카테고리의 다른 글

[분석방법론] 코호트 분석  (0) 2024.04.23
[분석방법론] A/B Test  (2) 2024.04.19

- 개념 

사용자 행동을 그룹으로 나눠 지표별로 수치화 한뒤 분석하는 기법입니다.

코호트 분석은 특정 기간에 공통된 특성이나 행동을 가진 사용자 그룹을 만들어 이들의 동질적인 특성을 분석하는 방법입니다. 

즉, 고객 세분화를 ‘시간의 흐름'을 기준으로 하는 것

 

- 필요성

사용자 유지율 등의 지표를 통해 특정 기간에 방문한 사용자가 시간 경과에 따라 참여도가 어떻게 달라지는지 등을 파악하고 이에 적절한 대응을 할 수 있습니다.

 

- 유의사항 

1. 코호트의 정의와 선택

코호트는 분석의 기본 단위입니다. 따라서 올바른 코호트를 선택하는 것이 매우 중요합니다. 코호트를 정의할때 어떤 기준을 사용할지 신중하게 결정해야 합니다.

 

2. 측정 지표의 선택 

코호트 분석에서 사용할 적절한 지표를 선택하는 것이 중요합니다. 예를 들어, 사용자 유지율, 구매량, 이탈률 등이 될 수 있습니다. 이러한 지표는 분석의 결과를 해석하는 데 중요한 역할을 합니다.

 

3. 통계적 유의성 

코호트 분석에서는 코호트 간의차이가 통계적으로 유의미한지를 확인해야 합니다. 즉, 어떤 차이가 우연에 의한 것인지 아니면 실제로 의미 있는 차이 인지를 판단해야 합니다.

 

4. 시간 요인의 고려 

코호트 분석에서는 시간이 매우 중요한 변수입니다. 따라서 시간의 흐름에 따라 코호트의 특성이 어떻게 변하는지를 고려해야 합니다.

 

5. 외부 요인의 고려 

외부 요인이 사용자 행동에 영향을 미칠 수 있습니다. 이러한 외부 요인을 고려하지 않고 코호트 분석을 수행할 경우 잘못된 결론에 이를 수 있습니다.

 

6. 인과 관계의 명확성 

코호트 분석에서 관찰된 상관관계가 인과관계를 나타내는지를 명확히 구분해야 합니다. 상관 관계가 인과 관계를 나타내지 않을 수 있으므로 이점을 유의해야 합니다. 

 

#리텐션 : 코호트 분석에서 자주 언급되는 리텐션은 유지율을 의미합니다.

코호트 분석에서 측정 지표로 많이 사용되며, 리텐션에 종류또한 다양하기 때문에 추후 별도로 포스팅 하도록 하겠습니다.



- 정리

1. 코호트 분석이란 시간의 흐름을 기준으로 고객을 세분화 하여 분석하는 기법

2. 코호트 분석에서 사용되는 리텐션(유지율) 지표를 통해 사용자가 시간 경과에 따라 참여도를 확인하여 성과를 확인 할 수 있습니다.

 

- 참조문서 

https://datarian.io/blog/cohort-analysis

'데이터분석 > 분석방법론' 카테고리의 다른 글

[분석방법론] RFM 분석  (0) 2024.04.23
[분석방법론] A/B Test  (2) 2024.04.19

- 개념

디지털 환경에서 전체 실사용자를 대상으로 대조군(Control Group)과 실험군(Experimental Group)으로 나누어서 어떤 특정한 UI나 알고리즘의 효과를 비교하는 방법론입니다.


- 필요성

상관관계로부터 인과관계를 찾기위해, 정확히 이야기하면 인과관계일 가능성이 높은것을 찾아내기 위함입니다.
그래야 "원인"에 해당하는 요소에 개입을 하여 "결과"에 해당하는 요소가 우리가 원하는 방향으로 변화되도록 할 수 있습니다.

- A/B 테스트에서 사용자를 분리하는 방법

 

1. 노출 분산 방식 : AB Test가 진행되는 페이지가 렌더링 될 때, 비율로 A와 B를 다르게 노출
2. 사용자 분산 방식 : 사용자를 A그룹과 B그룹으로 분리하여, 고정적으로 다른  Variation을 노출
3. 시간 분할 방식 : 초 ~ 분 단위 정도로 시간대를 세밀하게 분할하여 A안과 B안을 노출


- 진행방법
1. 리서치 (AB Test 진행 전 현재 상태의 성과를 측정)
2. 가설수립 
3. A안과 B안 생성 (가설을 기반으로 기존 요소가 담긴 A안과 특정 요소를 변형한 B안을 생성)

4. 테스트 진행
5. 분석 및 의사결정

- 유의사항
1. 무가설

 테스트를 통해 검증하고 싶은 가설이 없다면 실험에서 얻을 수 있는 결과는 거의 없습니다.


2. 통제 변수 관리 실패 

AB테스트가 실패하는 가장 큰 원인은 통제 변수를 식별하지 못했거나, 통제변수를 잘 관리하지 못하는 것입니다.

가설에서 정의한 독립 변수 외 다른 변수가 종속 변수에 영향을 미쳤다면 그 결과를 활용할 수 없습니다.


3. 단순 평균 비교 

종속변수의 변화를 단순 평균과 비교하면 우연에 의한 결과와 실제 효과를 혼동할 수 있습니다.

평균 비교 외에도 분포, 유의수준 등을 종합적으로 고려해서 결과를 해석해야 합니다.


4. 시간 흐름 무시 

시간의 흐름에 따라 종속 변수가 어떻게 변화했는지를 보는것도 중요합니다.


5. 엿보기와 조기중지 

실험중에 계속해서 p-value의 변화를 살펴보다가 p-value가 0.05이하로 내려가는 시점에 갑자기 실험을 중단하는 경우입니다.
통계적으로는 유의미한 차이가 있는 것으로 보이지만, 사실은 실험자가 인위적으로 만들어낸 결과이므로 서비스에 성장에 크게 도움이 되지 않습니다.


6) 과거에 대한 맹신

AB 테스트에서 유의미한 결과가 나왔다고 해서 그것이 계속해서 유의미하다고 보장할 수는 없습니다. 시장 변화, 계절 변화, 유저 변화 등 다양한 요인에 의해 AB테스트 결과는 얼마든지 달라질 수 있기 떄문입니다.

- 종합 : 
1. A/B Test는 두 집단을 임의적으로 나누어야 합니다.
2. 테스트하고자 하는 가설을 명확하게 설정하여 테스트를 진행해야 합니다.


- 참조문서
https://www.ascentkorea.com/ab-test/
https://brunch.co.kr/@digitalnative/19
https://datarian.io/blog/a-b-testing

'데이터분석 > 분석방법론' 카테고리의 다른 글

[분석방법론] RFM 분석  (0) 2024.04.23
[분석방법론] 코호트 분석  (0) 2024.04.23

 

Airflow의 스케줄링을 이용해서 Spark를 submit하려고했지만 위와 같은 에러가 발생하였습니다.

에러의 원인은 spark의 default connection의 host가 yarn으로 설정되어 있어 발생하였습니다.

 

분산모드가 아닌 로컬 모드에서 테스트로 이루어지는 상황에서 

host가 yarn으로 설정되어 있기 때문에 이러한 에러가 발생하였습니다.

 

https://airflow.apache.org/docs/apache-airflow-providers-apache-spark/stable/operators.html 참조

 

spark를 submit할때는 spark conection이 올바르게 설정되어 있어야합니다.

 

만약 master를 yarn으로 실행시키실 경우(분산모드) host를 yarn으로 변경해주시고,
local에서 실행하실 경우 (standalone모드) host를 local로 변경해주세요.

python을 이용하는 개발자로써 DataFrame형태의 데이터를 자주 접합니다.

 

python에서 hdfs에 dataframe 데이터를 저장하는 방법을 공유 합니다.

 

#hdfs 관련 라이브러리 로드
from hdfs import InsecureClient

#client 선언
hdfs_url = "http://<HDFS-NAMENODE-HOST>:<HDFS-NAMENODE-PORT>"
client = InsecureClient(hdfs_url, user="<HDFS-USER>")

#원하는 저장 경로(csv파일 또는 parquet 파일로 저장가능)
hdfs_path = "/path/to/your/directory/{file_name}.csv"
hdfs_path = "/path/to/your/directory/{file_name}.parquet"


with client.write(hdfs_path, overwrite=True) as writer:
    df.to_csv(writer, index=False, header=True)

 

 

Selenium을 통한 크롤링을 Airflow환경에서 테스트 중에 발생한 에러입니다.

확인 결과 구글(브라우저)이 설치되어 있지 않아 에러가 발생 했습니다.

 

Selenium에서 사용 중인 브라우저가 설치되어있는지 확인해보시고,

설치가 되어있지 않다면 아래 방법으로 설치해주시면 해결됩니다 !

 

1. 패키지 리스트 업데이트

sudo apt update

 

2. 구글 다운로드 및 설치 

 

#구글 패키지 다운로드
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

#구글 패키지 다운로드 파일 설치
sudo apt install ./google-chrome-stable_current_amd64.deb

3. 설치 확인

google-chrome-stable --version

 

이후 실행하면 정상적으로 접속이 가능한게 확인 되었습니다.

 

최근 airflow로 batch작업을 이관 하던 중 dataframe을 DB로 바로 저장할 수 있는 라이브러리를 찾아서 소개시켜드립니다.

 

insert문을 실행하지 않고 python으로 생성한 dataframe을 DB로 저장 시킵니다.

from sqlalchemy import create_engine
import pandas as pd

#test.csv를 dataframe형태로 읽기
df = pd.read_csv('test.csv')

#mysql+pymysql은 mairaDB에 대한 sqlalchemy의 드라이버를 의미합니다.
#SQLite 데이터베이스는 mysql+pymysql대신 sqlite를 적어주시면 됩니다.
connection_string = 'mysql+pymysql://유저명:password@localhost:3306/database'

#mariadb에 연결
engine = create_engine(connection_string)

#dataframe을 mairadb에 저장
#if_exists는 테이블이 이미 존재하는 경우 어떻게 처리할지에 대한 매개변수입니다. replace를 입력하여 기존 테이블을 대체할 수 있습니다.
df.to_sql("table명", engine, index = False, if_exists="replace")

 

python을 사용하시는 분들은 dataframe을 이용해 편리하게 DB에 데이터를 적재할 수 있습니다.

cat /dev/null > 파일명

 

ex) cat /dev/null > test.txt

 

/dev/null 은 리눅스 시스템에서 빈 파일 또는 데이터를 버리는 특별한 장치 파일입니다. 데이터가 이곳으로 전송되면 버려지게 됩니다. 

cat을 사용해서 파일의 내용을 표준출력으로 /dev/null로 리다이렉션하여 파일 내용을 삭제합니다.

'데이터 엔지니어 > 리눅스' 카테고리의 다른 글

[Linux]리눅스 기초 명령어  (0) 2022.03.17

+ Recent posts