Needs for transformations

Transformations are applied to accomplish certain objectives such as 

  • to ensure that the model is correctly specified,
  • to achieve normality,
  • or to stabilize the variance.

 

 

Example : Bacteria deaths due to X-ray radiation

$$n_t = \beta_0 + \beta_1 + \epsilon_t $$

 

9개의 plot 중에 첫 번째 plot을 통해 Lack of fit($E(\epsilon) \neq 0$) 문제를 확인할 수 있습니다.

따라서 X 변환을 통해 이 문제를 해결해주면 좋을 듯 합니다. 

그렇기에 우리가 처음 썼던 식에서 조금 변형을 해주면 다음과 같이 쓸 수 있습니다.

$$ n_t = \beta_0 + \beta_1t + \beta_2t^2 + \epsilon_t$$

그런데 첫 번째 그림에서 Lack of fit의 문제는 어느 정도 해결된 듯 보이나 

unequal variance 문제가 발생하였습니다. 

따라서 이 문제를 해결하기 위해 Y 변환을 고려하는 것이 좋을 듯 합니다. 

 

생물학에서는 Bacteria deaths due to X-ray radiation 문제의 식이 따로 존재합니다. 

$$n_t = n_0 e^{\alpha t}$$

 

따라서 이 식을 통해 다음과 같은 식을 유도할 수 있습니다.

$$logn_t = log n_0 + \alpha t$$

 

이 식은 $log n_t$를 Y로 생각하고 $logn_0$를 \beta_0, $\alpha t$를 $\beta_1 X$로 생각하면 선형회귀의 식으로 이해할 수 있습니다. 

 

따라서 $$logn_t = \beta_0 + \beta_1 t + \epsilon_t$$의 값으로 fitting을 하면 

 

네 이렇게 해서 lack of fit과 unequal variance에 대한 문제를 해결했습니다. 

3번째 그림을 통해 inferential observation을 관찰한 결과, 영향점은 없는 것으로 확인되고 있습니다. 

qqplot을 통해서 Normality도 보장되고 있다는 것을 확인할 수 있습니다. 

그럼 잔차의 독립성을 위해 Durbin-Watson 검정을 시행하면 

다음과 같이 나옵니다. 

Durbin-Watson D의 값이 2보다 크기 때문에 Pr > DW 부분의 p-value값을 통해 검정을 시행해보면

We fail to reject the null이기에 H0를 기각하지 못합니다.

그렇다고 안 좋은 게 아닙니다. 절대! 

Durbin-Watson 검정은 H0를 기각하지 않아야 잔차의 독립성을 만족한다고 생각하기에 

위의 값을 통해 잔차의 독립성이 만족된다는 것을 확인할 수 있습니다. 

 

따라서 저희는 이렇게 하여 회귀분석 4가지 가정을 모두 만족시켰습니다. 

 

 

또 다른 얘기를 위해 한 가지 예제를 더 들겠습니다. 

 

Example : Supervisors and supervised workers in industrial establishments

여기서 R-square가 0.7759가 나왔는데 사실 field에 따라 결정계수의 높고 낮음의 기준은 다르기에 field에 따라 결정계수의 값이 높다 나쁘다가 결정됩니다. 

 

여기서도 마찬가지로 첫 번째 그림에서 Lack of fit과 unequal variance가 의심이 됩니다. 

따라서 X, Y 변환을 고려해야 합니다. 

X의 제곱근을 더해주고, boxcox 변환을 통해 Y변환을 취해 줍니다. 

여기서 만약 선형모형이 맞다고 생각이 들더라도 Lack of fit이 의심되면 2차를 오버피팅하는 습관은 아주 좋습니다.

어차피 선형모형이 맞다고 하면 X의 제곱의 $\hat{\beta}$ = 0 으로 나올 것이기 때문입니다. 

 

현재 $\lamda$ = 0이 나왔기에 boxcox 변환할 때 log 변환을 취해주고 fitting을 해주면

 

위와 같은 결과가 나옵니다. 

여기서 그림을 살펴보면 기본 4가지 가정 중 3가지는 만족하는 것으로 보입니다만, 

inferential point가 2개 있는 것을 할 수 있습니다. 

 

일단 이 결과를 바탕으로 Durbin-Watson 검정을 시행해주면

위와 같은 결과가 나오기에 We fail to reject the null 이기에 잔차의 독립성은 만족됩니다.

 

 

안녕하세요~ 

 

너무 오랜만에 글을 올리는데 사실 요즘 하고 있는 공모전이 2개 있었고 

 

현재 진행중인게 하나 있는데 이게 잘 될지 안 될지는 잘 모르겠네요..ㅋㅋㅋ 현재 잘 안되고 있기도 하고요 하핫

 

주변에서는 '공모전 중독이다 그 정도면' 라고 할 정도로 막 뭐라하는데 저는 이 공모전들을 하기 전까지는 

 

실무 경험이 되게 중요하다고 느꼈거든요?

 

그런데 막상 지금에서야 느끼는거지만 실무 경험도 중요하긴한데 이론적 배경이 너무너무너무너무너무 중요한 것 같아요!

 

당장 이번에 하고 있는 공모전을 예로 들자면 회귀분석을 모델로 예측하는 걸 하고 있는데

 

회귀분석을 할 때 잔차에 대한 검정을 제대로 하고 했어야 했는데 그렇지 않은 것 같아 지금 결과가 예상한 것과는 다르게 나오네요 하핫

 

간단한 내용이긴 하지만 아는 만큼 보인다고 회귀분석 이론에 대해서 조금이라도 더 깊게 알고 있었다면 하지 않았을 실수라고 생각하니 안타까워 죽겠어요!! 

 

그런데 뭐 어쩌겠습니까 이미 엎질러진거 악으로 깡으로 버티면서 스토리라인 잘 그려가면서 어떻게든 발표 완수해야죠

 

어쨌든 그만큼 이론적 배경을 아는 것은 중요하다 따라서 앞으로의 공모전에서는 '최대한 많이 공부해서 하자'가 저의 목표입니다. 

 

공모전을 하니깐 옛날에는 그렇게 하기 싫던 공부가 그립더라고요 ㅋㅋㅋㅋㅋ 아으

 

사람이 참 간사한게 1학기 때는 해석학 때문에 엄청 고생해서 실무경험하고 싶다였는데 2학기 때는 실무경험 많이 하니깐 이론 쪽으로 공부하고 싶다는 생각이나 하고 있고 참

 

넵 어쨌든 요즘 글 안 올린다고 놀고 있는게 아니라 그만큼 음 빡세게 살고 있는거 같다는 겁니답 

 

아 물론 롤하러 안 갔으면 쓸 시간은 있었겠지만 ㅋㅋㅋㅋ.. 반성해야죠.. 롤이나 하러가고 아으.. 공모전하는 기간만이라도 롤을 아.. 안.. 안하지는 못하겠고 줄여보겠습니다!! ㄷㅇㅌ

 

아 그리고 앞으로는 복습한 내용 최대한 그날그날 올릴 수 있도록 노력하겠습니다. 

제 블로그가 정리도 잘 안 돼있고 하지만 그래도 오시는 분들을 위해서라도 잘잘잘 공부내용 정리해놓겠습니답

 

겨울 방학이 됐을 때 제가 이 글을 보면 어떤 생각이 들지도 궁금하네요ㅋㅋㅋㅋㅋ 

 

그럼 다른 글에서 뵙겠습니다

그리고 더 파이팅해보겠습니다 

 

이 글을 읽는 여러분들도 파이팅하세요!!

파이팅!

 

'일상 > 일기' 카테고리의 다른 글

2024년 회고록(?)  (0) 2025.01.19
요즘 근황(24.09.23)  (6) 2024.09.23
24.08.30 - 24.09.01 서울여행  (11) 2024.09.16
24.08.21 (수) - 계곡여행 + 앞으로의 다짐(?)  (2) 2024.08.21
오랜만에 일기  (0) 2024.04.02

Sales = $\beta_0$ + $\beta_1$youtube + $\beta_2$facebook + $\beta_3$newspaper + $\epsilon_i$

Q1. Write the assumptions we impose on $\epsilon$
>> $\epsilon$ ~ iid N(0, $\sigma^2$)


Q2. Using the OLS method, estimate regression coefficients.
$\hat{\beta_0}$ = 3.52667
$\hat{\beta_1}$ = 0.04576
$\hat{\beta_2}$ = 0.18853
$\hat{\beta_3}$ = -0.00104


Q3. Estimate $\sigma^2 $
4.09096

없으면 root MSE 제곱해서 답 적기($2.02261 ^ 2$)
SSE / DF = MSE


Q4. Test the overall utility of the model.
$H_0: \beta_1 = \beta_2 = \beta_3 = 0$
$H_1: \beta_j \neq 0$ for some j = 1,2,3

Let $\alpha = 0.05$
Since p-value =< 0.0001 is less than $\alpha = 0.05$, we reject $H_0$.
Thus, the overall model is useful.


Q5. Can we claim that the facebook advertising is related to sales? Justify.
$H_0: \beta_2 = 0$
$H_1: \beta_2 \neq 0$

Let $\alpha$ = 0.05.
Since p-value =< 0.0001 is less than $\alpha$ = 0.05, we reject $H_0$.
That is, we can claim that the facebook advertising is related to sales.


Q5-1. Can we claim that the newspaper advertising is related to sales? Justify.
$H_0$: $\beta_3 = 0$
$H_1$: $\beta_3 \neq 0$

Let $\alpha$ = 0.05.
Since p-value = 0.8599 is greater than $\alpha$ = 0.05, we fail to reject $H_0$.
That is, we can claim that the facebook advertising is related to sales.
This means that the newspaper advertising is not related to sales.


Q6. Compute the expected change in the sales when our spending for youtube advertisement increases by 1000달러 while the others are fixed. 
45.76달러(0.04576 * 1000달러)


Q7. Compute the expected sale when we spend 1000달러 for each method of adv.
$\hat{Sale}$
45.76 + 188.53 + 3526.67 - 1.04= 3.7599 * 1000

Q7-1. Compute the expected sale when we spend 0달러 for all of adv.
x들의 값이 0일 때의 기댓값이 위의 질문에 대한 대답
$\beta_0$ => 3.52667 * 1000달러

$\beta_0$는 실제의 데이터 변수의 성질에 따라 x들의 값을 0으로 둘 수 있는지 없는지가 갈린다. 

Q8. Can we argue that youtube is negatively related to the sale?
1. youtube랑 sales와 관계가 있는지부터 확인($\beta$)
2. 그러고 난 다음에 관계가 있으면 $\hat{\beta}$의 값을 신뢰할 수 있음. 
   왜냐하면 $\beta_1$의 값이 0이 아니라고 1번에서 결론지었기 때문에

We conclude that $\beta_1 \neq 0$.
However, since $\hat{\beta_1}$ = 0.04576 is greater than 0, we cannot argue that...

Q8-1. Can we argue that newspaper is negatively related to the sale?
We conclude that $\beta_3$ = 0. We cannot argue that ... 


Q9. Compute the R-squared and interpret it.
$R^2$ = 0.8972

89.72% variability in sales can be explained 
by the fitted model (with youtube, facebook, and newspaper.)


Q9-1. adj. R-squared 도 마찬가지.

'통계학 > 회귀분석(Regression Analysis)' 카테고리의 다른 글

Matrix format  (0) 2025.02.18
Qualitative variables as predictors  (0) 2024.11.22
Transformation of variables  (0) 2024.11.19
단순선형회귀 (Simple linear regression)  (3) 2024.09.25

Random vector

 

 

Joint Cumulative Distribution Function

위의 joint cdf를 그림으로 나타낸 것

 

Joint PDF / PMF

 

Marginal CDF and PDF / PMF

 

 

example

 

 

Expectation

 

Theorem

 

 

 

Remark

 

Example

 

 

 

 

 

Joint Moment Generating Function

 

Remark

 

example

 

 

Expected value of Random vector

'통계학 > 수리통계학(Mathematical Statistics)' 카테고리의 다른 글

Important inequalities  (0) 2024.10.04
Some special Expectations  (0) 2024.10.04
Expectation of Random Variables  (0) 2024.10.04
Continuous Random Variables  (0) 2024.10.04
Discrete Random Variables  (1) 2024.10.04

Theorem

 

Markov's inequality

 

Chebyshev's inequality

 

 

 

Convex function

 

 

Theorem

 

 

Jenson's inequality

 

example

 

 

Mean and Variance

example

 

r-th moment and Central moment

example

 

Moment Generating Function

 

MGF

 

CGF

 

 

Uniqueness of MGF

 

 

 

example

Expectation

 

Theorem

1.8.1

 

1.8.2

'통계학 > 수리통계학(Mathematical Statistics)' 카테고리의 다른 글

Important inequalities  (0) 2024.10.04
Some special Expectations  (0) 2024.10.04
Continuous Random Variables  (0) 2024.10.04
Discrete Random Variables  (1) 2024.10.04
Random variables  (3) 2024.09.20

Continuous Random Variables

 

Transformations

example

 

'통계학 > 수리통계학(Mathematical Statistics)' 카테고리의 다른 글

Some special Expectations  (0) 2024.10.04
Expectation of Random Variables  (0) 2024.10.04
Discrete Random Variables  (1) 2024.10.04
Random variables  (3) 2024.09.20
Conditional Probability and Independence  (1) 2024.09.16

Discrete Random Variables

 

Transformations

 

Example

One-to-one 이 아닌 케이스이기에 Case 2의 방식으로 풀어야함.

'통계학 > 수리통계학(Mathematical Statistics)' 카테고리의 다른 글

Expectation of Random Variables  (0) 2024.10.04
Continuous Random Variables  (0) 2024.10.04
Random variables  (3) 2024.09.20
Conditional Probability and Independence  (1) 2024.09.16
Sigma Field  (1) 2024.09.16

Python의 datetime 모듈은 날짜와 시간을 처리하기 위한 기본 내장 모듈입니다. 

시계열 데이터 전처리에 있어 핵심적인 역할을 하는데, 시계열 데이터 분석은 시간의 흐름에 따른 패턴을 찾는 과정이기 때문에, 날짜와 시간을 다루는 것은 필수적입니다. 

 

datetime 모듈은 다음과 같은 주요 클래스를 제공합니다. 

 

datetime.datetime:

날짜와 시간을 모두 포함하는 클래스입니다. 특정 날짜와 시간을 생성하고, 두 datetime 객체 간의 차이를 계산하거나, 날짜와 시간을 포맷팅하는데 사용됩니다. 

 

datetime.date:

날짜만을 포함하는 클래스입니다. 연도, 월, 일 정보를 다루며, 날짜 간의 차이를 계산할 수 있습니다. 

 

datetime.time:

시간만을 포함하는 클래스입니다. 시, 분, 초, 마이크로초 정보를 다룹니다. 

 

datetime.timedelta:

두 datetime 객체 간의 차이를 나타내는 클래스입니다. 시간 간격을 계산하고, 날짜와 시간에 간격을 더하거나 뺄 수 있습니다. 

 

문자열을 datetime 객체로 변환: 데이터셋에서 날짜와 시간이 문자열로 저장된 경우, 이를 datetime 객체로 변환하여 다양한 시간 연산을 수행할 수 있습니다. 

 

시간 간격 계산: 두 사건 사이의 시간 간격을 계산하여 분석에 활용할 수 있습니다.

날짜/시간 정규화: 날짜와 시간을 표준 형식으로 변환하여 일관된 데이터 처리를 할 수 있습니다. 

특정 시점 추출: 월말, 분기말 등의 특정 시점을 추출하여 분석할 수 있습니다. 

시간 기반 특성 생성: 요일, 월, 분기 등의 시간 기반 특성을 생성하여 모델링에 활용할 수 있습니다. 

 

적용

현재 날짜와 시간 가져오기 

now = datetime.now()

 

 

time delta 클래스를 이용한 날짜 연산

future_date = now + timedelta(days=100)

 

timedelta 클래스는 기간을 표현하며, 날짜나 시간에 더하거나 빼는 연산에 사용됩니다. 예를 들어, 100일 후의 날짜를 계산하려면 timedelta(days = 100)를 현재 날짜에 더해주면 됩니다. 

 

 

날짜만 추출

future_data_only = future_date.date()

 

경우에 따라 시간 부분을 제외하고 날짜만 필요할 수 있습니다. 이때는 datetime객체의 .date() 메서드를 사용하여 날짜 부분만 추출할 수 있습니다. 

 

시간 차이 측정

from datetime import datetime, timedelta

# 현재 날짜와 시간
now = datetime.now()

# 100일 뒤의 날짜 계산
n_days = 100
future_date = now + timedelta(days = n_days)

# 두 날짜 사이의 차이 계산
time_diff = future_date - now
print(f"{n_days}일 뒤까지의 시간 차이: {time_diff}")

# 시간 단위로 변환
hours_diff = time_diff.total_seconds() / 3600
print(f"시간 차이 (시간 단위로): {hours_diff:.2f} 시간")

# 과거 날짜 계산 (예: 어제)
yesterday = now - timedelta(days = 1)
print(f"어제 날짜와 시간: {yesterday}")
  • timedelta 객체를 사용하여 미래 날짜를 계산하려면, 현재 날짜에 timedelta(days=n_days)를 더해줍니다.
  • 두 날짜의 차이를 계산할 때는 datetime 객체끼리의 뺄셈을 사용합니다. 이로 인해 또 다른 timedelta 객체가 생성됩니다.
  • timedelta 객체의 전체 초(second)를 계산하려면 total_seconds() 메서드를 사용하고, 이를 시간 단위로 변환하려면 3600으로 나눕니다.
    total_seconds(): 전체 시간을 초 단위로 반환 
  • 과거 날짜를 계산하려면 현재 날짜에서 timedelta(days=1)을 빼줍니다.
    days: 일 단위 차이
    seconds: 초 단위 차이(일 단위를 제외한 초)
    microseconds: 마이크로초 단위 차이(초 단위를 제외한 마이크로초)

 

datetime의 date 클래스 생성과 날짜 비교

from datetime import date

# 오늘 날짜 가져오기
today = date.today()
print(f"오늘 날짜: {today}")

# 특정 날짜 설정
special_day = date(2024, 12, 25)
print(f"특별한 날: {special_day}")

# 날짜 비교
if today < special_day:
    print("특별한 날이 아직 오지 않았습니다.")
elif today == special_day:
    print("오늘은 특별한 날입니다!")
else:
    print("특별한 날이 지났습니다.")
  • date 클래스를 datetime 모듈에서 가져오려면 from datetime import date를 사용합니다.
  • 오늘 날짜를 가져오기 위해 date.today() 메서드를 사용합니다.
  • 특정 날짜를 설정할 때 date(연도, 월, 일) 형태로 작성합니다. 예를 들어, special_day = date(2024, 12, 25)와 같이 설정합니다.

 

datetime의 time 클래스 생성과 시간 비교

from datetime import datetime, time

# 현재 시간 가져오기
now = datetime.now()
current_time = now.time()
print(f"현재 시간: {current_time}")

# 특정 시간 설정
start_time = time(9, 0)
end_time = time(17, 0)
print(f"업무 시작 시간: {start_time}, 종료 시간: {end_time}")

# 시간 비교
if start_time <= current_time <= end_time:
    print("현재는 업무 시간입니다.")
else:
    print("현재는 업무 시간이 아닙니다.")
  • time 클래스를 datetime 모듈에서 가져오기 위해 from datetime import time을 사용합니다.
  • 현재 시간에서 시간 부분만 가져오기 위해 now.time() 메서드를 사용합니다.
  • 특정 시간을 설정하려면 time(시, 분) 형태로 작성합니다. 예를 들어, start_time = time(9, 0)과 end_time = time(17, 0)를 설정합니다.

 

datetime의 date와 time 결합하여 datetime 생성

from datetime import datetime, date, time

# 특정 날짜와 시간 설정
meeting_date = date(2024, 1, 15)
meeting_time = time(14, 30)

# 날짜와 시간을 결합하여 datetime 객체 생성
meeting_datetime = datetime.combine(meeting_date, meeting_time)
print(f"회의 일시: {meeting_datetime}")
  • datetime 객체를 생성하기 위해 datetime.combine() 메서드를 사용합니다. 이 메서드는 특정 날짜(date 객체)와 시간(time 객체)를 결합하여 datetime 객체를 만듭니다.

 

날짜 포맷팅: strftime을 활용한 날짜 및 시간 형식 지정

from datetime import datetime

# 현재 시간 얻기
now = datetime.now()

# 기본 포맷으로 출력 (예시: 2024-08-07 05:40:28)
basic_format = now.strftime('%Y-%m-%d %H:%M:%S')
print(f"기본 포맷: {basic_format}")

# 한글 포맷으로 출력 (예시: 2024년 08월 07일 05시 40분 28초)
korean_format = now.strftime('%Y년 %m월 %d일 %H시 %M분 %S초')
print(f"한글 포맷: {korean_format}")

# 날짜만 출력 (예시: 2024/08/07)
date_only_format = now.strftime('%Y/%m/%d')
print(f"날짜만: {date_only_format}")

# 12시간제 시간만 출력 (예시: 05:40 AM)
time_12h_format = now.strftime('%I:%M %p')
print(f"12시간제 시간만: {time_12h_format}")

# 요일과 월 이름 포함 포맷 (예시: Wednesday, 07 August 2024)
weekday_month_format = now.strftime('%A, %d %B %Y')
print(f"요일과 월 이름 포함 포맷: {weekday_month_format}")

# ISO 8601 표준 포맷 (예시: 2024-08-07T05:40:28)
iso_format_basic = now.strftime('%Y-%m-%dT%H:%M:%S')
print(f"ISO 8601 표준 포맷 (기본): {iso_format_basic}")

# ISO 8601 표준 포맷 (예시: 2024-08-07T05:40:28+0900)
# 시간대 포함
iso_format_with_timezone = now.strftime('%Y-%m-%dT%H:%M:%S%z')
print(f"ISO 8601 표준 포맷 (시간대 포함): {iso_format_with_timezone}")

 

strftime 메서드는 datetime 객체를 특정 형식의 문자열로 변환하는 강력한 도구입니다. 이 메서드를 사용하면 날짜와 시간을 다양한 형식으로 포맷팅할 수 있어, 보고서 작성, 데이터 시각화, 로그 기록 등에서 유용하게 활용할 수 있습니다. 

 

주요 포맷 코드 

  • %Y: 4자리 연도 
  • %m: 2자리 월
  • %d: 2자리 일
  • %H: 2자리 24시간제 시간(00-23)
  • %l: 2자리 12시간제 시간(01-12)
  • %M: 2자리 분(00-59)
  • %S: 2자리 초(00-59)
  • %p: AM/PM 표시
  • %A: 요일 (예: Wednesday)
  • %B: 월 이름 (예: August)
  • %Y-%m-%d: ISO 8601 표준 날짜 형식 
  • %d %B %Y: 일 - 월이름 - 연도 형식(예: 07 August 2024)

'프로그래밍 > 머신러닝' 카테고리의 다른 글

LightGBM  (1) 2024.09.04
다변량 이상치 탐지 방법  (0) 2024.08.25
정규 표현식 (Regular Expression)  (0) 2024.08.23
로지스틱 회귀분석  (0) 2024.08.13
혼자 공부하는 머신러닝 + 딥러닝(딥러닝)  (0) 2024.08.08

+ Recent posts