데이터 분석 트랙 35일차 (25.04.01.) TIL
[목차]
- 아티클 정리
- 파이썬 <문법> 종합 : 부가기능들2
- 아티클 정리
“A/B 테스트 제대로 이해하기 : 1 테스트를 설계할 때 우리의 진짜 질문은?”
https://yozm.wishket.com/magazine/detail/1633/
A/B 테스트 제대로 이해하기: 1테스트를 설계할 때 우리의 진짜 질문은? | 요즘IT
서비스 기획, PM, 그리고 그로스 해킹과 관련한 부트캠프나 신입 교육 과정을 살펴보면, A/B 테스트에 관한 이야기가 많다. 아마도 서비스를 개선하는 실험 방안 중 하나로 A/B 테스트가 가장 유명(
yozm.wishket.com
1. 내용 요약
- “A/B테스트”는 오바마 대선 자금 모집 캠페인[https://brunch.co.kr/@pak6477/3]에 활용될 만큼 효과적인 전략 및 가설 검증 테스트로서 알려진 기법이다.
- 일반적으로 A/B테스트에 대하여 “목표 달성 방안으로 A와 B중 가장 효과가 좋은 것”이라는 간략한 정의 및 생각을 갖고 있을 것이다.
- 하지만 단순히 그러한 생각에서 출발하여 가설 및 테스트를 진행하기엔 문제의 여지가 있다.
- “A와 B방안의 결과가 극명하길 소망”, “모집단, 표본, 실험의 설계 및 진행 과정상의 공정성의 요구”, “여러 번의 검증 및 테스트 상에서 나온 결과 단순 심리에서 기인하여 우발적, 비개연적이지 않길 소망”, 등등 다양한 테스트 시행자의 주관 혹은 과정의 목표 설정의 모호함으로 겪는 에로사항이 있을 것이다.
- 이러한 점을 고려할 때 가장 이상적인 형태의 A/B테스트의 설계 및 실험은 무엇인지 고민해야 할 필요가 있다.
2. 주요 포인트
- “A/B테스트”의 설계 및 결과 해석 상에서 범할 수 있는 흔한 오류 요인과 “A/B테스트”의 설계상 엄밀한 사고의 필요성
3. 인사이트
- “단순히 A와 B방안이라는 가설을 설정하고 그를 비교하는 것”이 아니라 가설 설정 시 여러 요인들을 고려(가령 “가장 큰 상관관계를 갖는 요인은 무엇이고 그것에 따른 맞는지 틀린지 검증한다.”)한다는 점에서 “데이터 분석가”는 A/B테스트가 “가설 설정과 비교”가 아닌 명확한 인과 내지 상관관계를 갖는 요인 색출과 그에 대한 가설의 설정이라는 생각을 하게 되었다. 그리고 이러한 가설을 설정하기 위해 전처리 및 인사이트 도출에 좀 더 힘을 기울여야 한다는 생각을 하게 되었다.
- 팀 종합 인사이트 : 데이터 실험 설계에 있어서의 신뢰성 보증 수단, 인과관계, 검증된 결과의 적용 범위와 실제성, 신뢰성 높은 결과 도출을 위한 방법 선정의 중요성 등등 공통적이고 확장적인 인사이트를 볼 수 있어 좋았다.
- 파이썬 <문법> 종합 : 부가기능들2
1. 클래스
1.1. 정의 # 어떠한 대상군, 객체1을 만들기 위한 설계도 혹은 틀
- 객체 지향 프로그래밍의 중요 개념 중 하나로 현실 세계 사물을 모델링해 프로그래밍 하는 방법이다.
- 머신러닝, 딥러닝 등등에 활용하며 코드의 재사용성과 차후 유지보수에 있어 유용하다.
1.2. 구성요소 및 주요 개념과 특징
a. __init__(self, 속성1, 속성2, ......)
- 클래스의 생성자, 객체가 생성될 때 호출하며 초기화 작업을 수행한다.
- 객체가 가져야 할 속성을 정의한다.
b. method(self, 속성1, 속성2, .......)
- 클래스 내부에 정의된 함수
- 객체의 동작을 정의한다.
- 작업이 수행될 시 객체의 상태를 변경한다.
- 일반적으로 클래스의 인스턴스(instance)에서 호출되며, 해당 인스턴스의 상태에 따라 동작
# 인스턴스 : 클래스의 타입으로 선언된 객체1이 메모리에 할당되어 실제 사용될 때 즉, 설계도로 실제 생성된 객체1
c. 다형성(Polymorphism)
- 같은 이름의 메서드가 서로 다른 클래스에서 다른 기능을 수행하게 하는 개념
ex.
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()
※ 위 코드에서 Animal 클래스의 sound 메서드를 각각의 하위 클래스인 Dog와 Cat에서 재정의하여 다른 동작을 수행하게 됩니다.
중요! 각 클래스의 생성자 및 메서드의 첫 매개변수엔 self를 사용해야 한다! 이때의 self는 해당 메서드가 속한 객체를 의미!
1.3. 기본 구조
class ClassName:
def __init__(self, parameter1, parameter2):
self.attribute1 = parameter1 # attribute : 속성! 해당 객체의 속성을 의미
self.attribute2 = parameter2
def method1(self, parameter1, parameter2)
“# 메서드 내용 작성”
pass
# 매서드의 첫 번째 매개변수로 "self"를 반드시 사용! 이것은 해당 메서드가 속한 객체를 가리킴!
1.4. 클래스 vs 함수
함수(Function) | 클래스(Class) |
- 일련의 작업 수행 블록 - 일반적으로 입력(매개변수)을 받아들이고 그에 따른 결과를 반환 - 특정 작업 수행하는 독립 코드 블록! - 클래스와 상관 없이 독립적 정의 가능 |
- 데이터와 해당 데이터를 처리하는 메서드(함수)를 묶어 놓은 것 - 객체 설계를 통해 객체를 생성한다는 것이 포인트 - 객체의 상태(속성)와 행위(메서드)를 정의, 이를 캠슐화해 객체를 생성 및 핸들링한다. - 클래스는 상속을 통해 기존 클래스를 확장! 다형성을 지원해 유연한 코드 구조를 구현 가능![즉, 동물, 식물 큰 부류로 속성을 구분한 클래스를 이용해 동물에 고양이, 개의 속성을 부여해 하나의 개체를 만드는 것!] - 여러 객체를 생성하고 관리해 코드 구조를 향상, 재사용성을 높임. |
함수가 그저 여러 법칙, 기능으로서 작용한다면 클래스는 하나의 설계도를 통해 개체를 창조하는 것! 그냥 모형틀, 깔대기로 사용되는가 vs 객체군을 형성하여 그들을 다루기 용이하게 만드는가? |
1.5. 데이터 분석에서의 클래스
A. 데이터 구조화
- 해당 데이터를 객체로 표현해 데이터의 컬럼들을 속성으로 정의 가능
B. 데이터 전처리 모듈화
- 데이터의 정규화, 결측치 처리, 이상치 제거 등의 작업을 클래스의 매서드로 구현할 수 있다.
C. 모델링과 분석 작업
- 선형 회귀 모델, 분류 모델, 군집화 모델 등을 클래스로 정의한 뒤 모델 학습, 예측, 평가 등을 메서드로 구현
2. 불리언 인덱싱
- 정의 : 조건에 따라 배열이나 리스트에서 요소를 선택, 추출하는 방법
- numpy라이브러리 혹은 pandas라이브러리를 활용한다.
ex. numpy의 array()활용 리스트 요소 추출
import numpy as np
배열을 담을 변수명 = np.array([요소1, 요소2, 요소3, 요소4, 요소5])
조건을 담을 변수명 = np.array([True, False, True, False, True]) # 직접 값을 지정
혹은
[불리언 값을 가질 조건1] # 단순히 조건을 지정
추출한 값을 담을 변수명 = 배열을 담은 변수명[조건을 담은 변수명] #직접 값을 지정하거나 조건을 지정한 변수명을 입력!
출력문(추출한 값을 담을 변수명) # 추출한 값이 나온다.
3. 데코레이션
- 정의 : 데코레이터(Decorator)를 사용하여, 함수나 메서드를 인자로 받아 해당 함수 및 메서드를 변경 혹은 래핑하는 함수!
- 즉, 기존 함수를 별도 수정 없이 추가 기능을 넣을 때 사용 # 함수 내부 구조를 일일이 뜯어고지치 않고 외부에서 작성!
- 기본 형태
def decorator_function(original_function):
def wrapper_function(**kwargs):
# 함수 호출 전에 실행되는 코드
result = original_function(**kwargs)
# 함수 호출 후에 실행되는 코드
return result
return wrapper_function