▶ 파일 확장자
● CSV 파일(.csv) : Comma Separated Values의 약자로, 데이터를 쉼표(,)로 구분하여 저장하는 형식이다.
→ 데이터프레임으로 불러오기 : pandas 라이브러리의 read_csv() 함수를 사용한다.
import pandas as pd
df = pd.read_csv('file.csv')
● Excel 파일(.xls, .xlsx) : 표 형태로 데이터를 저장하는 Microsoft Excel의 형식이다.
→ 데이터프레임으로 불러오기 : pandas의 read_excel() 함수를 사용한다.
import pandas as pd
df = pd.read_excel('file.xlsx')
● JSON 파일(.json) : JavaScript Object Notation의 약자로, 데이터를 저장하는 간단한 형식이다.
→ 데이터프레임으로 불러오기 : pandas의 read_json() 함수를 사용한다.
import pandas as pd
df = pd.read_json('file.json')
● 텍스트 파일(.txt, .dat, 등) : 일반 텍스트로 된 데이터를 저장하는 파일이다.
→ 데이터프레임으로 불러오기 : pandas의 read_csv() 함수를 사용할 수 있다.
import pandas as pd
df = pd.read_csv('file.txt', delimiter='\t')
# 만약 탭으로 구분되어 있다면 delimiter='\t'를 사용한다.
▶ 파일 불러오기
→ Colab 사용 시 내가 가지고 있는 데이터 파일을 읽어오기 위해서는 '드라이브 마운트'를 필수적으로 해줘야 한다.
from google.colab import drive
drive.mount('/content/drive')
# 아래는 제가 데이터 파일을 넣은 구글 드라이브 경로에요!
# 제 구글 드라이브 안에 '스파르타코딩클럽_데이터분석을위한파이썬'이라는 폴더가 있는데
# 그 안에 파일을 넣은 상황 입니다.
# 여러분의 폴더 이름에 맞게 경로를 바꾸어 보세요!
root = "/content/drive/MyDrive/스파르타코딩클럽_데이터분석을위한파이썬"
# 그리고 위 경로에 해당 파일 이름도 함께 이어 붙여서 파일 경로를 하나 완성합니다
file_address = root + "/ssec2403(통계표).xlsx"
# 위에서 지정해 놓은 파일 경로를 활용하여 불러오기만 하면 끝!
import pandas as pd
df = pd.read_excel(file_address)
▶ 파일 저장하기
● CSV 파일
import pandas as pd
data = {
'Name': ['John', 'Emily', 'Michael'],
'Age': [30, 25, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
excel_file_path = '/content/sample_data/data.csv'
df.to_csv(excel_file_path, index = False)
print("csv 파일이 생성되었습니다.")
● Excel 파일
import pandas as pd
data = {
'Name': ['John', 'Emily', 'Michael'],
'Age': [30, 25, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
excel_file_path = '/content/sample_data/data.xlsx'
df.to_excel(excel_file_path, index = False)
print("Excel 파일이 생성되었습니다.")
● JSON 파일
import json
data = {
'Name': ['John', 'Emily', 'Michael'],
'Age': [30, 25, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
json_file_path = '/content/sample_data/data.json'
# json 파일을 쓰기모드로 열어서 data를 거기에 덮어씌우게 됩니다.
with open(json_file_path, 'w') as jsonfile:
json.dump(data, jsonfile, indent=4)
print("JSON 파일이 생성되었습니다.")
● 텍스트 파일
data = {
'Name': ['John', 'Emily', 'Michael'],
'Age': [30, 25, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
text_file_path = '/content/sample_data/data.txt'
with open(text_file_path, 'w') as textfile:
for key, item in data.items():
textfile.write(str(key) + " : " + str(item) + '\n')
print("텍스트 파일이 생성되었습니다.")
▶ 파일 찾기
● glob이란?
→ 파일 시스템에서 파일을 찾을 때 사용하는 도구, 주로 파일 이름이나 확장자에 따라 파일을 필터링하는 데 사용된다.
import glob
# 현재 경로의 모든 파일을 찾기
file_list1 = glob.glob('*')
# 단일 파일 패턴으로 파일을 찾기
file_list2 = glob.glob('drive')
# 디렉토리 안의 모든 파일 찾기
file_list3 = glob.glob('sample_data/*')
# 특정 확장자를 가진 파일만 찾기
file_list4 = glob.glob('sample_data/*.csv')
▶ 패키지(라이브러리)
→ 관련된 여러 개의 모듈을 포함하는 '디렉터리'이다.
- 데이터 분석을 위한 파이썬 패키지들을 다양한 작업을 수행하는데 필수적이다.
- 데이터 분석을 위한 파이썬 패키지들은 다양한 작업을 수행하는 데 필수적입니다.
- 이들 패키지들은 데이터 수집, 전처리, 시각화, 모델링, 통계 분석 등 다양한 기능을 제공합니다.
- 파이썬에서 패키지와 라이브러리를 사용하는 것은 코드의 재사용성을 높이고, 개발 속도를 빠르게 하며, 코드의 가독성을 향상합니다.
- 또한, 다른 개발자들이 작성한 코드를 활용함으로써 자신의 프로젝트를 보다 효율적으로 개발할 수 있습니다.
→ 맨 처음 파이썬을 사용할 때 필요한 패키지들을 맨 위에 한 번에 불러놓고 사용하면 편리하다!
● 패키지 모음
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import seaborn
● pandas
→ 데이터 조작과 분석을 위한 라이브러리로, 데이터를 효과적으로 조작하고 분석할 수 있도록 도와준다.
import pandas as pd
df = pd.read_excel(file_address)
print(df)
● numpy
→ 과학적 계산을 위한 핵심 라이브러리로, 다차원 배열과 행렬 연산을 지원한다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr.mean())
● matplotlib
→ 데이터 시각화를 위한 라이브러리로, 다양한 그래프와 플롯을 생성할 수 있다.
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()
● seaborn
→ matplotlib을 기반으로 한 통계용 데이터 시각화 라이브러리, 보다 간편하고 아름다운(?) 시각화를 제공한다.
import seaborn as sns
import pandas as pd
data_sample = pd.DataFrame({'x':[1, 2, 3, 4], 'y':[1, 4, 9, 16]})
sns.barplot(data=data_sample, x='x', y='y')
● scikit-learn
→ 머신 러닝 알고리즘을 사용할 수 있는 라이브러리로, 분류, 회귀, 군집화, 차원 축소 등 다양한 머신 러닝 기법을 제공한다.
from sklearn.datasets import load_iris
from sklearn.linear_model import LinearRegression
# Iris 데이터셋 불러오기
iris = load_iris()
# Iris 데이터셋에서 특정 범위의 데이터 슬라이싱하기
X_train = iris.data[:,:-1] # 데이터 값들 추출
print("학습 데이터:", X_train)
y_train = iris.data[:,-1:] # 정답값 추출
print("학습 데이터:", y_train)
model = LinearRegression()
model.fit(X_train, y_train)
● statsmodels
→ 통계 분석을 위한 라이브러리로, 회귀 분석, 시계열 분석, 비모수 통계 등 다양한 통계 기법을 제공한다.
import statsmodels.api as sm
model = sm.OLS(y_train, X_train)
result = model.fit()
print(result.summary())
● scipy
→ 과학기술 및 수학적인 연산을 위한 라이브러리로, 다양한 과학 및 공학 분야에서 활용됩니다. 선형대수, 최적화, 신호 처리, 통계 분석 등 다양한 기능을 제공한다.
import numpy as np
from scipy.integrate import quad
# 적분할 함수 정의
def integrand(x):
return np.exp(-x ** 2)
# 정적분 구간
a = 0
b = np.inf
# 적분 계산
result, error = quad(integrand, a, b)
print("결과:", result)
print("오차:", error)
● tensorflow
→ 딥러닝 및 기계 학습을 위한 오픈소스 라이브러리로, 구글에서 개발했습니다. 그래프 기반의 계산을 통해 수치 계산을 수행하며, 신경망을 구축하고 학습할 수 있다.
import tensorflow as tf
input_size = 3
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation='relu', input_shape=(input_size,)),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
● pytorch
→ 딥러닝을 위한 오픈소스 라이브러리로, Facebook에서 개발했습니다. 동적 계산 그래프를 사용하여 신경망을 구축하고 학습할 수 있다.
import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.fc2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
▶ 포맷팅(Formatting)
→ 정보나 데이터를 일정한 형식과 구조에 맞게 정리하고 표현하는 것
# 포멧팅하지 않고 출력
x = 10
print("변수 x의 값은", x, "입니다.")
# f-string을 이용해 포멧팅하여 출력
x = 10
print(f"변수 x의 값은 {x}입니다.")
# 또 다른 포멧팅 방법
x = 10
print("변수 x의 값은 {}입니다.".format(x))
# 옛날 방식의 포멧팅
x = 10
print("변수 x의 값은 %d입니다." % (x))
▶ 리스트 캄프리헨션
→ 파이썬에서 반복문과 조건문을 사용하여 리스트를 간결하게 생성하는 방법 중 하나. 파이썬의 강력한 기능 중 하나로, 데이터 처리 및 변환에 유용하게 활용된다.
# 기본적인 구조
[표현식 for 항목 in iterable if 조건문]
# 예시: 1부터 10까지의 숫자를 제곱한 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares) # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 예시: 리스트에서 짝수만 선택하여 제곱한 리스트 생성
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares) # 출력: [4, 16, 36, 64, 100]
# 예시: 문자열 리스트에서 각 문자열의 길이를 저장한 리스트 생성
words = ["apple", "banana", "grape", "orange"]
word_lengths = [len(word) for word in words]
print(word_lengths) # 출력: [5, 6, 5, 6]
# 예시: 리스트 컴프리헨션을 중첩하여 2차원 리스트 생성
matrix = [[i for i in range(1, 4)] for j in range(3)]
print(matrix) # 출력: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
▶ lmada(람다)
→ lambda 키워드로 정의하는 이름 없는 한 줄짜리 간단한 함수로, 주로 함수형 프로그래밍에서 함수를 인자로 전달할 때 사용된다.
lamda 함수의 장점으로는,
- 간결성 : 코드를 더 간결하게 만들어 줌. 간단한 연산이나 조작 필요한 경우 유용함.
- 익명성 : 이름이 없어 임시로 필요한 경우에 사용 가능. 정렬이나 필터링과 같은 함수의 매개변수로 전달될 때 많이 사용됨.
- 함수형 프로그래밍 : 함수를 값으로 취급하고 함수를 다루는 함수형 프로그래밍 패러다임에서 람다 함수가 필요함. 함수를 매개변수로 받는 고차 함수를 작성하거나 함수를 반환하는 경우에 효과적.
- 가독성 : 간단한 표현식을 사용하여 코드를 작성하므로 가독성이 향상됨. 특히 함수가 짧고 명확한 경우에 유용함.
● lamda와 함수의 차이점
| - | lamda | 함수 |
| 정의 방식 | lamda 키워드 사용하여 익명함수 정의 | def 키워드 사용하여 명시적으로 함수 정의 |
| 구조 | 한 줄로 표현되는 간단한 표현식만 포함 | 여러 줄의 코드 블록을 가질 수 있음 |
| 이름 | 이름이 없음. 한 번만 사용되거나 임시로 필요한 경우에 사용 |
함수의 이름을 지정하여 호출할 수 있음 |
| 사용 | 매개변수로 받거나 함수를 반환하는 고차 함수, 즉 함수형 프로그래밍에서 사용 가능 |
어떤 경우에도 사용 가능 |
● lamda 예시
# 간단한 덧셈 함수
add = lambda x, y: x + y
print(add(3, 5)) # 출력: 8
# 제곱 함수
square = lambda x: x ** 2
print(square(4)) # 출력: 16
☞ 내장 함수 ' filter '
→ 여러 개의 데이터로부터 조건을 충족하는 데이터만 추출할 때 사용(조건에 따라 추출해 줌)
filter(조건 함수, 반복 가능한 데이터)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 출력: [2, 4, 6, 8, 10]
☞ 내장 함수 ' map '
→ 여러 개의 값을 받아서 각각의 값에 함수를 적용한 결과를 반환해 줌(함수대로 만들어 줌)
map(함수, 반복 가능한 데이터)
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # 출력: [1, 4, 9, 16, 25]
▶ os 모듈
→ 운영 체제와 상호 작용하기 위한 다양한 함수들을 제공한다.
● 주요 기능
- 파일 및 디렉토리 관리 : 파일 생성, 이름 변경, 삭제, 디렉토리 생성, 탐색, 삭제 등의 작업을 수행할 수 있다.
# 현재 작업 디렉토리 가져오기
import os
cwd = os.getcwd()
print(cwd)
# 디렉토리 생성
import os
os.mkdir('sample_data/new_directory')
# 파일 이름 변경
import os
os.rename('sample_data/new_directory', 'sample_data/new_directory2')
# 파일 삭제
import os
os.remove(file_adress)
import os
os.remove('sample_data/data.csv')
- 경로 관리 : 절대 경로, 상대 경로, 현재 작업 디렉토리 등의 경로 관리와 경로 구성 요소를 조작하고, 경로를 연결하고, 경로를 정규화할 수 있다.
# 파일 목록(경로) 가져오기
import os
files = os.listdir('/content')
print(files)
# 경로 조작
import os
path = os.path.join('/content', 'sample_data', 'mnist_test.csv')
print(path)
- 환경 변수 관리 : 시스템의 환경 변수를 가져오거나 설정할 수 있다.
- 실행 관리 : 외부 프로그램을 실행하거나, 현재 프로세스의 종료 등의 작업을 수행할 수 있다.
▶ split 메서드
→ 문자열을 여러 부분으로 나누는 기능으로, 파일 경로에서 파일명 추출 등 문자열 처리 작업에 유용하게 활용된다.
# 데이터의 경로를 문자열로 표현
file_path = "/usr/local/data/sample.txt"
# split() 함수를 사용하여 디렉토리와 파일명으로 분할
directory, filename = file_path.rsplit('/', 1)
print("디렉토리:", directory) # 출력: 디렉토리: /usr/local/data
print("파일명:", filename) # 출력: 파일명: sample.txt
'''
file_path라는 문자열 변수에 데이터의 경로를 저장하고,
split() 함수를 사용하여 문자열을' / '기준으로 분할한다.
rsplit() 함수를 사용하여 오른쪽에서부터 최대 1회만 분할하도록 설정하여
파일명과 디렉토리로 나눈다.
분할된 결과를 각각 directory와 filename 변수에 할당하여 출력한다.
'''
▶ Class (클래스)
→ 객체를 만들기 위한 설계도로, 데이터(속성)와 기능(메서드)을 함께 묶어 관리하는 객체지향 프로그래밍의 핵심 개념이다.
→ 코드의 구조화·재사용성·유지보수성을 높이며, 상속과 다형성을 통해 확장 가능한 프로그램을 만들 수 있게 해 준다.
→ 데이터 분석에서는 데이터 구조화, 전처리 모듈화, 모델링 구현 등에 활용된다.
# 클래스의 기본 구조
class ClassName:
def __init__(self, parameter1, parameter2):
self.attribute1 = parameter1
self.attribute2 = parameter2
def method1(self, parameter1, parameter2):
# 메서드 내용 작성
pass
'''
메서드의 첫 번째 매개변수로 ' self '를 반드시 사용해야 한다.
이는 해당 메서드가 속한 객체를 가르킨다.
'''
● 다형성
→ 같은 이름의 메서드가 서로 다른 클래스에서 다른 기능을 수행하도록 하는 개념이다.
class Animal:
def sound(self):
print("Some generic sound")
class Dog(Animal):
def sound(self):
print("Woof")
class Cat(Animal):
def sound(self):
print("Meow")
# 다형성 활용
animals = [Dog(), Cat()]
for animal in animals:
animal.sound()
● 인스턴스(instance)
→ 클래스를 이용해 실제로 만들어진 객체. 클래스가 "붕어빵 틀"이라면, 인스턴스는 그 틀로 만든 "실제 붕어빵"
● 메서드(Method)
→ 클래스 내부에 정의된 함수이며, 특정 작업을 수행하거나 클래스의 상태를 변경하는 역할이다.
→ 일반적으로 클래스의 인스턴스에서 호출되며, 해당 인스턴스의 상태에 따라 동작한다.
● 속성(Attribute)
→ 클래스나 클래스의 인스턴스에 속한 변수이다.
→ 클래스나 인스턴스의 상태를 나타냅니다. 즉, 객체의 데이터를 저장한다.
▶ 불리언 인덱싱(Boolean indexing)
→ 조건에 따라 요소를 선택하는 방법 중 하나, 주어진 조건에 따라 배열이나 리스트에서 요소를 선택할 수 있게 해주는 강력한 도구이다.
→ 파이썬에서는 NumPy를 사용하여 불리언 인덱싱을 수행할 수 있고 Pandas에서 데이터를 조건에 맞게 선택할 때 많이 사용한다.
import numpy as np
# 배열 생성
arr = np.array([1, 2, 3, 4, 5])
# 불리언 배열 생성 (조건에 따라 True 또는 False 값을 갖는 배열)
condition = np.array([True, False, True, False, True])
# 불리언 인덱싱을 사용하여 조건에 맞는 요소 선택
result = arr[condition]
# 결과 출력
print("Result using boolean indexing:", result) # 출력: [1 3 5]
# 불리언 인덱싱을 사용하여 배열에서 짝수인 요소만 선택
evens = arr[arr % 2 == 0]
# 결과 출력
print("Even numbers using boolean indexing:", evens) # 출력: [2 4]
▶ 데코레이터(Decorator)
→ 함수나 메서드의 기능을 확장하거나 수정하는 강력한 도구이다.
→ 함수나 메서드를 인자로 받아 해당 함수나 메서드를 변경하거나 래핑 하는 함수이다.
→ 기존의 함수를 따로 수정하지 않고도 추가 기능을 넣고 싶을 때 사용한다.
def decorator_function(original_function):
def wrapper_function(**kwargs):
# 함수 호출 전에 실행되는 코드
result = original_function(**kwargs)
# 함수 호출 후에 실행되는 코드
return result
return wrapper_function
▶ 파이썬 에러!!
- SyntaxError (구문 오류) : 코드의 문법을 확인하고 괄호, 따옴표, 콜론 등을 올바르게 사용했는지 확인하기. 코드 블록의 들여 쓰기도 확인하기
- IndentationError (들여 쓰기 오류) : 들여 쓰기를 일관되게 맞추기. 보통은 스페이스 4개 or 탭 사용
- NameError (이름 오류) : 사용된 변수나 함수가 정의되었는지 확인하기. 오탈자나 변수명의 대소문자를 확인하고, 정의되지 않은 변수나 함수를 정의하기
- TypeError (타입 오류) : 연산이나 함수 호출에서 사용되는 데이터 타입을 확인하고, 필요한 형 변환을 수행하기.
- IndexError (인덱스 오류) : 인덱스 범위를 확인하기. 존재하지 않는 인덱스 접근을 피하고, 슬라이싱을 사용하여 안전하게 데이터에 접근하는 것도 하나의 방법
- KeyError (키 오류) : 사용되는 키가 딕셔너리에 존재하는지 확인하기.
- FileNotFoundError (파일을 찾을 수 없음 오류) : 파일 경로를 올바르게 지정했는지 확인하기.
- 외의 오류 : 구글링 하기
☆ 데이터리터러시 ☆
▶ 지표란?
- 특정 목표나 성과를 측정하기 위한 구체적이고 측정 가능한 기준
- 목표 달성도를 평가하고 전략적 결정에 필요한 핵심 정보 제공
- 정의한 문제에 대해 정확하게 파악하기 위해 필요
| 문제 정의 | 지표 설정 |
| 어떤 문제를 풀고자 하는가? | 어떤 결과를 기대하는가? |
| 둘 이상의 해석이 나오지 않도록 구체적으로 표현하고 정의했는가? | 정의한 문제를 확인하는데 적합한가? |
● Active User(활성유저)
서비스에 들어오는 모든 유저를 의미하지는 않는다.
활성유저 정의에 따라 전략과 방향이 달라지고, '이탈 유저'가 정의된다.
서비스 지표에 중요한 역할을 한다.
○ Active User 설정
- 어디까지 경험한 유저가 우리의 활성유저인가?
- 일반유저와 활성유저를 나누는 기준은?
- 유저는 어디서 우리 서비스의 효용성을 느낄까?
- 우리가 핸들링할 수 있는 유저의 사이즈는 얼마나 될까?
| 지표 | 정의 |
| 전체 Active User | 앱 접속 이력이 있는 유저 |
| 서비스별 Active User | 서비스별 서브메인 이하 추가 액션이 있는 유저 |
| DAU | Daily Active User |
| WAU | Weekly Active User |
| MAU | Monthly Active User |
| 이탈유저(이탈율) | 전체 DAU로 잡혔지만, 각 서비스의 DAU로 잡히지 않은 유저(비율) |
| CVR(Conversion Rate) | 특정 행동을 한 후, 전환된 비율 |
| CTR(Click Thtough Rate) | 어떤 페이지에 접근한 후, 특정 요소를 클릭한 비율 |
● Retention Ratio(재방문율)
→ 몇 %의 유저가 우리 서비스를 다시 사용하는가?
→ 정의 : 서비스를 사용한 사람이 다시 서비스를 사용하는 비율%
- 한번 획득한 유저가 서비스로 다시 돌아왔는가? 에 대한 지표
- 재방문율이 높은 서비스를 획득비용에 투자한 비용을 빠르게 회수할 수 있음
- 성장에 있어서 매우 중요한 지표(특히 앱서비스)
- 기본적으로는 방문을 기준으로 측정하지만, Active User에서 활성의 기준을 정해줬던 것과 같이, 서비스의 특성에 따라 '활성'의 기준을 다르게 정의할 수 있음
- 일반적으로 재방문율은 시간이 지남에 따라 자연스럽게 감소함
- 기울기가 점점 완만해지며 안정화되는 그래프를 가지고 있다면, 시장에 적합한 서비스라고 할 수 있음
○ Retention 측정방법
1. N-Day 리텐션
- 최초 사용일로부터 N일 후에 재방문한 Active User의 비율
- 일반적으로 사용하는 리텐션 지표는 N-Day 리텐션
- 게임, 소셜 등 습관적으로 사용하거나 반복적으로 행동을 유도하는 제품에 적합
- 유저가 Active User로 집계된 최초 날을 Day 0으로 설정하고 Day 0에 액티브 상태가 된 모든 유저들의 N일차 리텐션 계산
2. Unbounded 리텐션
- 특정 날짜를 포함하여 그 이후에 재방문한 유저의 비율
- 특정일을 포함하여 그 이후에 한 번이라도 재방문한 유저의 비율
- 유저가 정기적으로 반복해서 방문하는 서비스가 아닐 경우 적합
3. Bracket 리텐션
- 설정한 특정 기간을 기반으로 재방문율을 측정
- Bracket 리텐션은 N-Day 리텐션을 확장한 개념 > 일/주/월 단위가 아닌 지정한 구간으로 나눔
- 1(0일차) / 2(1-3일차) / 3(4-6일차) / 4(7-11일차)
- 활성유저가 특정한 활동을 위해 각 Bracket 내 서비스에 재방문 시 잔존 유저로 해석
● Funnel(퍼널)
→ 유저들이 어디서 이탈하는가?를 확인하기 위한 구조화
잠재고객을 유입시키며 최종적인 목표 액션을 달성할 때까지의 과정이다. 모든 서비스와 비즈니스는 각 단계로 갈수록 이용자 수가 줄어들게 되며, 각 단계의 전환율을 측정한다.
○ AARRR
→ 디지털 마케팅 시 퍼널을 활용하는 프레임워크이며, 단계별 전환율을 지표화 하여 서비스 보완 지점을 찾기 위함이다.
- Acquisition: 유입
- Activation: 활성화
- Retention: 재방문(재구매)
- Revenue: 수익
- Referral: 추천
● LTV (Life Time Value, 고객 평생 가치)
→ 해당 유저가 우리에게 평생 주는 이익은 얼마나 될까?
- 고객 생애 주기: 한 명의 유저가 서비스를 사용하기 시작하여 이탈할 때까지의 기간
- LTV는 한 명의 유저가 생애 주기 동안 얼마만큼의 이익을 주는지를 정량적으로 지표화 한 것
- LTV는 유저와의 관계를 측정하고, 이를 사업적 이익으로 가져가는데 중요한 지표
- LTV가 높다는 것은 해당 서비스와 관계가 좋고, 충성도가 높은 고객이 많다는 것
↓ ↓ ↓ LTV 산출 방법↓ ↓ ↓
- 이익 x Life Time x 할인율(미래 비용에 대한 현재 가치)
- 연간 거래액 x 수익률 x 고객 지속 연수
- 고객의 평균 구매 단가 x 평균 구매 횟수
- (매출액 – 매출 원가) / 구매자 수
- 평균 구매 단가 x 구매 빈도 x 구매 기간
- (평균 구매 단가 x 구매 빈도 x 구매 기간) – (신규 획득 비용 + 고객 유지 비용)
- 월 평균 객단가 / 월 가중 평균 잔존율
등 산출하는 방법은 매우 여러 가지이며, 서비스마다 관점마다 다르기 때문에 다각도로 고민이 필요하다.
● 북극성 지표
→ 제품·서비스가 고객에게 제공하는 핵심 가치를 기반으로 장기적인 사업 성장을 가장 잘 예측하고 측정하는 핵심 선행지표이다.
↓ ↓ ↓ 좋은 북극성 지표를 위한 체크리스트↓ ↓ ↓
- 유저가 목적을 달성하는 때가 언제인가?
- 모든 유저가 해당되나?
- 측정 가능한 지표인가?
- 측정 주기가 적절한가? (일, 주, 월, …)
- 외부 요인으로부터 영향을 많이 받진 않는가?
- 북극성지표의 성장이 사업의 성장과 함께하는가?
- AARRR 퍼널 전 과정이 북극성 지표에 영향을 주는가?
- 북극성 지표의 변화가 적어도 매주 관찰가능한가?
↓ ↓ ↓ 북극성 지표가 중요한 이유↓ ↓ ↓
→ 조직이 무엇에 집중하고 어떤 가치를 만들어야 하는지 명확한 기준을 제시해 실행과 책임을 일관되게 만든다.
2. 효율 증대
→ 전 조직의 목표를 하나로 정렬해 중복·충돌 업무를 줄이고 협업 효율을 높인다.
파이썬 기초 마지막 강의를 들으며 마무리 했다. 정말 다양한 내용을 배웠는데 이해가 잘 되지 않고 내용이 좀 어려웠어서 강의를 듣는데 시간이 좀 걸렸다. 오늘따라 집중도 잘 되지 않아서 강의를 좀 돌려가며 봤다..
기억에 가장 많이 남는 부분은 '리스트 캄프리헨션'과 '람다 함수'를 이용하여 코드를 좀 더 간결하고 빠르게 실행시킬 수 있는 부분이다. 이 두 가지를 잘 이용하면 코드를 좀 더 효율적으로 작성할 수 있을 것 같다.
그 외에 이해가 잘 되지 않았던 부분은 추후에 복습하는 시간이 필요할 것 같다.
다음 주 월요일까지 쉬는 날이니 컨디션 회복하고 다시 집중할 수 있도록 해야겠다!
'내일배움 본캠프' 카테고리의 다른 글
| [내일배움 본캠프] Python 기초 마무리 Day (1) | 2026.05.27 |
|---|---|
| [내일배움 본캠프] Python 기초 다지기 (0) | 2026.05.26 |
| [내일배움 본캠프]Python에서 함수란? (0) | 2026.05.21 |
| [내일배움 본캠프] 조건문과 반복문(if, For, While) (0) | 2026.05.20 |
| [내일배움 본캠프]Python기초 (0) | 2026.05.19 |