내일배움캠프

데이터 분석 트랙 35일차 (25.04.01.) TIL

jjaio8986 2025. 4. 1. 22:23

[목차]

  • 아티클 정리
  • 파이썬 <문법> 종합 : 부가기능들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 메서드를 각각의 하위 클래스인 DogCat에서 재정의하여 다른 동작을 수행하게 됩니다.

중요! 각 클래스의 생성자 및 메서드의 첫 매개변수엔 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