얼마전에 키보드를 키크론 저소음 적축 리시버를 새로 장만했다. 재작녀에 구매할 때 잘못 사서 리시버가 없어서 유선으로만 사용했는데 나름 키감이 좋아서 이번에는 저소음 적축으로 구매했는데 생각보다 색감이 달라서 적응중이다. 그래도 소음이 아주 적고 무겁지만 그래도 오랫동안 키보드를 두드리고 있어도 어깨가 아프지 않고 기분이 좋아진다는 것이 가장 좋은 점이다. 이전 버전도 저소음 적축이라고 해서 샀는데 키감도 소리도 전혀 다르다. 왜 그런가 고민하다가, 그 시간에 그냥 일이나 하고 책이나 좀더 보자 생각하면서 지내고 있다.

반응형

'내 이야기' 카테고리의 다른 글

퇴물이 된 느낌.  (1) 2024.10.10
좀 쉬고 싶은데  (1) 2024.10.05
난 어떻게 살아야 할까?  (0) 2024.09.26
둘째 재수학원 마지막 학원비 납부 완료  (3) 2024.09.23
번아웃이 올려나  (2) 2024.09.13

 예전 회사 다닐 때에는 의무감도 있었고 주변에서 지켜보는 사람들이 많아서 어느 정도 노력을 하면서 살았고 한 번도 포기하지 않았다. 그러나 이 회사로 옮기고 나서는 가끔은 포기하고 싶은 생각을 해본다. 아니, 포기보다는 내가 이 직장에 맞는 것인지 아니면 내가 일하는게 정말 가치가 있는 것인지에 대한 고민을 하고 있다. 예전에는 주어진 일을 좀더 잘 해보려고, 재미있는 일도 만들고 사람들과 함께 해보려고 생각했는데 요즘에는 이래저래 고민이 많다.

 

 난 어떻게 살아야 할까? 이직하고 항상 고민했던 내용이다. 첫 2년은 최선을 다하고 노력하는 삶을 살아왔지만 점점 지쳐가는 것은 사실이다. 뭔가 새롭고 멋진 무언가를 해야 하는데 내가 과연 그것을 할 수 있는 사람인지 과연 월급값은 하는지 고민을 하고 있다.

반응형

'내 이야기' 카테고리의 다른 글

좀 쉬고 싶은데  (1) 2024.10.05
피곤한데 잠이 안오네  (0) 2024.09.28
둘째 재수학원 마지막 학원비 납부 완료  (3) 2024.09.23
번아웃이 올려나  (2) 2024.09.13
맥북에어 M1 재사용 시작합니다.  (0) 2024.09.06

 카드로 결제했으니깐, 당장 다음 카드 결제할 때 조금 힘들기는 하겠지만, 뭔가 전환점을 돌았다는 느낌이 든다. 큰애는 워낙에 말도 많고 탈도 많은 녀석이었지만 둘째는 공부하는데 힘들어 하기는 했지만 얌전히 학원과 집을 오가면서 열심히 하고 있다. 큰애는 정말 바닥인 성적을 재수하면서 중상위권으로 올리면서 나름 성공적인 성적으로 재수 생활을 마무리했다. 큰애 고3때 회사 사업철수로 회사 그만두고 다른 회사 면접 보느라 정신이 없었고, 막상 내가 재취업에 성공해서 이직하고 나서는 큰애가 재수생활을 시작했다.

 

 지금 돌아보면 인생중 가장 힘들고 돈이 많이 들었던 4년의 시간이 거의 끝나간다. 2021년부터 2024년까지 4년째 수험생 뒷바라지를 하는 아내와 자사고+학원비를 내느라 등골이 휘는 내모습이었다. 그러고 보니 그렇게 힘들었던 기간동안 아내와 크게 싸우지 않고 조용조용 마무리를 했구나 생각이 들었다. 정말 고민 많이 했고 돈도 많이 썼지만 그나마 이제 2명까지 마무리가 된다는 생각에 조금은 마음을 놓을 수 있다. 무엇보다 2천만원에 육박하는 마이너스를 유지하고 있었는데, 반기 성과급을 받아도 획기적으로 대출이 줄지는 않는다는 생각이 든다.

 

 매달 꽤 많은 금액을 연금도 붓고 투자도 하지만 재수하는데 들어가는 돈이 만만치 않기 때문에, 연초에 대대적으로 ETF 정리하고 줄여놨던 마통이 2천만원 가까이 올라왔다. 아내도 간호조무사 학원 다니면서 돈이 꽤 들어갔고 혼자 벌어서 5명을 부양하다보니 어쩔 수 없는 상황이었다. 덕분에 차를 바꾼다고 노래를 불렀지만 아직도 바꾸지를 못하고 있다. 큰애는 군대 들어갔고 아마 둘째가 군대를 갈 때쯤이면 큰애가 전역할 것 같다. 지금 보니까 그때가 되면 셋째도 재수 안하면 대학생일 것 같다. 계약직으로 다니는 회사에서는 대학교 학자금을 지원해주기 때문에 아이들 졸업할 때까지는 다녀야 할텐데 모르겠다.

 

 회사에서 자리를 잡으려면 매일매일 조금씩 머신러닝, 딥러닝 관련해서 공부를 해야 하는데 그게 쉽지가 않다. 앞으로도 지치지 말고 열심히 살아야겠다.

반응형

'내 이야기' 카테고리의 다른 글

피곤한데 잠이 안오네  (0) 2024.09.28
난 어떻게 살아야 할까?  (0) 2024.09.26
번아웃이 올려나  (2) 2024.09.13
맥북에어 M1 재사용 시작합니다.  (0) 2024.09.06
난 ENTJ  (3) 2024.09.03

고객이 앱에서 페이지 방문 패턴을 시각화하는 방법을 한국어로 설명드릴게요.

### 1. **데이터 수집 및 준비**
   - **데이터 로깅**: 사용자의 페이지 방문, 타임스탬프, 사용자 ID, 세션 ID, 페이지 체류 시간 등과 같은 중요한 상호작용 데이터를 기록해야 합니다.
   - **데이터 정리**: 각 세션을 사용자가 방문한 페이지 순서와 타임스탬프로 정리하여 사용자 경로를 명확히 파악할 수 있도록 합니다.

### 2. **주요 시각화 기법**

   #### a. **Sankey 다이어그램 (흐름 차트)**
   - **목적**: 고객이 앱에서 각 페이지 간 어떻게 이동하는지를 보여줍니다. 첫 번째로 방문한 페이지와 이후에 어떻게 이동했는지, 이탈하는 지점을 확인할 수 있습니다.
   - **도구**: D3.js, Plotly (Python), Power BI 등에서 Sankey 다이어그램을 만들 수 있습니다.
   - **예시**: 사용자가 첫 페이지에서 두 번째 페이지로 얼마나 이동했는지, 특정 페이지에서 많이 이탈하는지 등을 보여줍니다.

   #### b. **히트맵 (Heatmap)**
   - **목적**: 특정 페이지 내에서 사용자가 가장 많이 상호작용하는 부분을 색상으로 시각화합니다. 예를 들어, 버튼 클릭이나 스크롤 등 특정 요소의 사용 빈도를 볼 수 있습니다.
   - **도구**: Google Analytics, Hotjar 같은 도구를 사용하거나, Matplotlib와 Seaborn 같은 라이브러리로 직접 히트맵을 만들 수 있습니다.
   - **예시**: 사용자들이 특정 페이지에서 가장 많이 클릭하는 영역을 시각화하여 중요한 행동을 분석할 수 있습니다.

   #### c. **순차 패턴 분석 (Sequential Pattern Analysis)**
   - **목적**: 사용자가 앱에서 페이지를 방문하는 순서를 분석하고, 자주 발생하는 패턴을 찾아냅니다. 이를 통해 사용자가 주로 어떤 경로로 앱을 사용하는지 파악할 수 있습니다.
   - **도구**: Markov Chain 모델이나 Python의 `mlxtend` 라이브러리를 사용해 분석할 수 있습니다.
   - **예시**: 사용자가 홈 페이지 → 제품 페이지 → 결제 페이지로 이동하는 빈도를 분석할 수 있습니다.

### 3. **실행 방법**
   - 데이터를 적절히 정리한 후, 위에 언급된 시각화 도구와 기법을 사용하여 고객의 앱 내 페이지 방문 패턴을 시각화할 수 있습니다. 
   - 이러한 시각화는 고객의 이동 경로, 이탈 지점, 주요 상호작용 포인트를 명확히 보여주어 UX 개선이나 마케팅 전략에 중요한 인사이트를 제공합니다.

이해가 쉽게 되었나요? 추가로 궁금한 부분이 있으면 알려주세요!

순차 패턴 분석(Sequential Pattern Analysis)은 사용자가 특정 순서대로 어떤 페이지를 방문하는지 분석하는 데 유용합니다. 파이썬에서는 `mlxtend` 라이브러리를 사용하여 간단한 연관 규칙 기반의 순차 패턴 분석을 수행할 수 있습니다. 여기서는 **Markov Chain 모델**을 기반으로 하는 순차 패턴 분석의 예제를 살펴보겠습니다.

### 1. **설치**
먼저 필요한 라이브러리를 설치해야 합니다:

```bash
pip install mlxtend
```

### 2. **데이터 준비**
사용자 세션 데이터를 리스트로 정리해봅니다. 각 사용자가 페이지를 방문한 순서에 따라 데이터를 정리해야 합니다.

#### 예시 데이터 (사용자 ID별 페이지 방문 순서):
```python
# 예제: 사용자별 페이지 방문 기록
sessions = [
    ['home', 'product', 'cart', 'checkout'],  # 세션 1
    ['home', 'search', 'product', 'checkout'],  # 세션 2
    ['home', 'product', 'checkout'],  # 세션 3
    ['home', 'search', 'product'],  # 세션 4
    ['product', 'cart', 'checkout'],  # 세션 5
    ['home', 'cart', 'checkout'],  # 세션 6
]
```

### 3. **순차 패턴 분석: Markov Chain**
Markov Chain 모델은 사용자가 현재 상태에서 다음 상태로 이동할 확률을 계산하는 데 적합합니다. 여기서는 각 페이지에서 다른 페이지로 이동할 확률을 계산하는 예제를 살펴봅니다.

#### 단계별로 수행되는 과정:

```python
import pandas as pd
from collections import defaultdict

# 데이터: 사용자 방문 기록
sessions = [
    ['home', 'product', 'cart', 'checkout'],
    ['home', 'search', 'product', 'checkout'],
    ['home', 'product', 'checkout'],
    ['home', 'search', 'product'],
    ['product', 'cart', 'checkout'],
    ['home', 'cart', 'checkout'],
]

# 페이지 전환 횟수 계산
transitions = defaultdict(lambda: defaultdict(int))

for session in sessions:
    for i in range(len(session) - 1):
        current_page = session[i]
        next_page = session[i + 1]
        transitions[current_page][next_page] += 1

# 전환 확률 계산
transition_probabilities = defaultdict(dict)

for current_page, next_pages in transitions.items():
    total_visits = sum(next_pages.values())
    for next_page, count in next_pages.items():
        transition_probabilities[current_page][next_page] = count / total_visits

# 결과 출력
df = pd.DataFrame(transition_probabilities).fillna(0)
print(df)
```

### 4. **결과 분석**
이 코드는 각 페이지에서 다른 페이지로 이동할 확률을 계산합니다. 예를 들어, 사용자가 'home'에서 'product'로 이동할 확률과 'home'에서 'search'로 이동할 확률을 보여줍니다.

#### 예시 출력:

```
           cart  checkout  product  search
cart        0.0      1.00     0.00    0.00
checkout    0.0      0.00     0.00    0.00
home        0.2      0.00     0.60    0.20
product     0.5      0.50     0.00    0.00
search      0.0      0.00     1.00    0.00
```

#### 해석:
- `home` 페이지에서 `product`로 이동할 확률은 60%, `search`로 이동할 확률은 20%입니다.
- `product`에서 `checkout`으로 이동할 확률은 50%, `cart`로 이동할 확률은 50%입니다.

### 5. **시각화 (선택 사항)**
Markov Chain 모델을 시각화하기 위해 네트워크 그래프를 그릴 수 있습니다.

```python
import networkx as nx
import matplotlib.pyplot as plt

# 그래프 생성
G = nx.DiGraph()

# 엣지 추가 (페이지 간 확률 기반)
for current_page, next_pages in transition_probabilities.items():
    for next_page, prob in next_pages.items():
        G.add_edge(current_page, next_page, weight=prob)

# 시각화
pos = nx.spring_layout(G)
edges = G.edges(data=True)
weights = [edge[2]['weight'] for edge in edges]

nx.draw(G, pos, with_labels=True, node_size=3000, node_color='skyblue', font_size=10, width=weights)
plt.show()
```

이 코드를 실행하면 페이지 간 이동 확률을 시각화한 네트워크 그래프가 표시됩니다. 각 페이지는 노드로 표현되고, 이동할 확률은 엣지의 두께로 표시됩니다.

### 결론
위 코드를 통해 사용자가 앱 내에서 어떻게 페이지를 이동하는지, 어떤 페이지 간 이동이 자주 발생하는지 파악할 수 있습니다. 이를 통해 이탈 지점을 분석하거나, 주요 페이지 경로를 최적화할 수 있습니다.

 

 

 

반응형

'Python, PySpark' 카테고리의 다른 글

networkx - sql과 함께  (0) 2024.10.24
Python networkx  (1) 2024.10.10
PCA와 PLS 차이점(챗지피티 설명)  (0) 2024.09.21
파이토치 CNN 분석  (2) 2024.08.28
Jupyterlab에서 텍스트 파일 미리보기(encoding='euc-kr')  (0) 2024.07.15

**PCA (Principal Component Analysis)**와 **PLS (Partial Least Squares)**는 모두 차원 축소 기법으로, 고차원 데이터를 처리할 때 중요한 정보를 유지하면서 데이터의 차원을 줄이는 데 사용됩니다. 그러나 두 방법의 목표와 작동 방식에는 차이가 있습니다. PCA는 **비지도 학습** 방식으로, PLS는 **지도 학습** 방식으로 차원을 축소하고 변수들을 변환하는 방법입니다.

### 1. **PCA (주성분 분석)**
**PCA**는 데이터의 차원을 축소하는 **비지도 학습** 방법입니다. 데이터를 몇 개의 **주성분(Principal Components)**으로 변환하여, 각 주성분이 데이터의 분산을 최대한 많이 설명할 수 있도록 만듭니다.

#### PCA의 핵심 특징:
- **목적**: 데이터의 **분산**을 최대한 설명하는 새로운 축(주성분)을 찾는 것.
- **입력 데이터**: 입력 데이터(X)만을 사용하고, 종속 변수(y)는 사용하지 않습니다.
- **방법**: 변수들 간의 **공분산** 구조를 분석해, 분산을 최대화하는 방향으로 데이터를 변환합니다. 주성분들은 서로 **직교(orthogonal)**하며, 각 주성분은 독립된 축을 형성합니다.
- **차원 축소**: 주성분을 몇 개 선택하느냐에 따라 차원을 축소합니다. 주성분들은 입력 변수들의 선형 결합으로 만들어집니다.
- **설명된 분산**: 첫 번째 주성분은 데이터의 분산을 가장 많이 설명하고, 두 번째 주성분은 첫 번째 주성분에 직교하면서 남은 분산을 최대한 설명하는 방식입니다.

#### PCA의 한계:
- **목표 변수와의 관계를 고려하지 않음**: PCA는 데이터의 분산에만 초점을 맞추므로, 목표 변수(y)가 있는 경우 그와의 상관관계를 고려하지 않습니다. 따라서 회귀나 분류 문제에서 직접적으로 최적화된 변수를 찾기에는 적합하지 않을 수 있습니다.

#### PCA의 활용:
- 데이터 시각화, 노이즈 제거, 다중 공선성 문제 해결, 차원 축소 후 분석 등을 위해 사용됩니다.

### 2. **PLS (부분 최소 제곱법)**
**PLS**는 회귀와 차원 축소를 결합한 **지도 학습** 기법입니다. **입력 변수(X)**와 **출력 변수(y)** 간의 관계를 최대한 잘 설명하는 **잠재 변수(latent variables)**를 찾는 것이 목표입니다. PLS는 X와 y를 모두 사용하여 두 집합 간의 공분산을 최대화하는 새로운 변수를 찾습니다.

#### PLS의 핵심 특징:
- **목적**: 입력 변수(X)와 출력 변수(y) 간의 **상관관계**를 최대화하는 방향으로 차원 축소.
- **입력 데이터**: 입력 데이터(X)와 출력 데이터(y)를 함께 사용하여, 두 데이터 집합 간의 관계를 고려합니다.
- **방법**: X와 y 간의 **공분산**을 최대화하는 잠재 변수를 찾습니다. PLS는 X와 y의 공분산 행렬을 이용해 변환을 수행하며, 그 결과 X의 변수를 변환하여 y와의 관계를 잘 설명하도록 만듭니다.
- **차원 축소 및 회귀**: PLS는 X의 차원을 줄이면서도, 목표 변수(y)를 예측하기 위한 회귀 모델을 구축할 수 있습니다.
- **다중 공선성 문제 해결**: PLS는 X 변수들 간의 상관관계를 고려하면서도 y와의 관계를 유지하므로, 다중 공선성 문제를 효과적으로 해결할 수 있습니다.

#### PLS의 장점:
- **목표 변수와의 관계를 최적화**: PLS는 차원 축소 시 y와의 관계를 반영하여, 회귀 문제에서 더 적합한 결과를 도출할 수 있습니다.
- **다중 공선성 해결**: X 변수들 간에 상관관계가 높아도, y와의 관계를 유지하면서 변수를 변환할 수 있습니다.
- **회귀 성능**: PLS는 X와 y 간의 관계를 최적화하므로, PCA보다 회귀 문제에서 더 나은 성능을 발휘하는 경우가 많습니다.

#### PLS의 활용:
- 회귀 분석, 예측 모델링, 다중 공선성 문제 해결, 고차원 데이터 분석 등에 주로 사용됩니다.

### 3. **PCA와 PLS의 차이점**

| 특성 | PCA | PLS |
| --- | --- | --- |
| **목적** | 데이터의 **분산**을 최대한 많이 설명하는 주성분을 찾음 | 입력(X)와 출력(y)의 **상관관계**를 최적화하면서 차원을 축소 |
| **입력 데이터** | 입력 데이터(X)만 사용 (비지도 학습) | 입력 데이터(X)와 출력 데이터(y)를 동시에 사용 (지도 학습) |
| **차원 축소 기준** | 데이터의 분산을 기준으로 차원 축소 | X와 y 간의 상관관계를 최대화하는 방향으로 차원 축소 |
| **결과 해석** | 주성분들이 원본 변수의 선형 결합으로 해석 | X와 y 간의 관계를 설명하는 잠재 변수를 통해 해석 |
| **다중 공선성 문제** | 다중 공선성 문제를 해결할 수 있지만 y와의 관계는 고려하지 않음 | 다중 공선성 문제 해결 및 y와의 관계를 반영 |
| **주요 응용** | 시각화, 데이터 구조 이해, 비지도 차원 축소 | 회귀 분석, 예측 모델링, 지도 차원 축소 |

### 4. **PCA와 PLS의 선택 기준**
- **PCA**는 **비지도 학습**으로 레이블(목표 값)이 없는 데이터에서 차원을 축소하거나, 데이터 구조를 탐색하고 싶을 때 적합합니다. 데이터의 분산이 주된 관심사일 경우 유용합니다.
- **PLS**는 **지도 학습**으로, 회귀 분석이나 예측 문제에서 차원 축소와 동시에 y와의 관계를 반영한 변수를 만들고 싶을 때 사용됩니다. 특히, X와 y 간의 상관관계가 중요한 경우에 PLS가 더 적합합니다.

### 요약
- **PCA**는 데이터를 몇 개의 주성분으로 변환하여 **데이터의 분산을 설명하는 방향**으로 차원을 축소하는 비지도 학습 방법입니다. 주로 데이터 구조 파악, 차원 축소, 시각화 등에 사용됩니다.
- **PLS**는 입력 데이터(X)와 출력 데이터(y) 간의 **상관관계를 최대화**하는 방향으로 차원을 축소하는 지도 학습 방법입니다. 주로 회귀 분석이나 예측 모델에서 활용되며, 다중 공선성 문제를 해결하고 X와 y 간의 관계를 유지하면서 차원을 축소하는 데 적합합니다.

반응형

 이 회사에 들어오면서 내가 부족한게 많이 있다는 것을 아주 잘 알게 되었다. 예전에는 정말 잘하던게 있었는데, 억지로 팀장을 맡고 프로젝트를 맡아서 일을 하면서 감을 잃었다. 솔직히 말하면 감을 잃은 것이 아니라, 학습곡선이 올라가다가 중간에 멈춰버린 것이라고 보면 좋을 것이다. 그때에는 내가 새로운 솔루션을 도입하고 빅데이터분석도구를 쓰고 싶어서 사람들을 찾아 다니고, 일을 벌린 것이다. 내가 하고 싶은게 있어서 권한과 예산이 필요해서 팀장 업무를 했다고 보면 된다.

 

 물론 일하면서 한번도 마음이 편했던 적이 없다. 다들 능력도 출중하고 실력이 좋았다. 저번 회사에서도 그런 생각을 안한 것은 아니지만, 여기서는 여기가 왜 대기업인지 그리고 우리 나라에 몇 없는 시중은행인지 알 수 있을만큼 대단한 곳이었다. 저번 회사에도 뛰어난 인재들은 많았지만, 정체된 조직에서 정해진 업무를 아주 효율적으로 수행하기는 하더라도 여기만큼 신기술과 장비를 이용하는 사람들을 보지는 못했다.

 

 처음에는 주눅이 들었다. 솔직히 내가 여기서 잘 버틸 수 있을까 고민을 했지만 야근 많이 하고 사람들과 어울리고 그러면서 조금씩 감을 찾기 시작했고 내가 잘하는 일도 찾아서 슬슬 업무 범위를 넓히고 있는 중이다. 

반응형

'내 이야기' 카테고리의 다른 글

난 어떻게 살아야 할까?  (0) 2024.09.26
둘째 재수학원 마지막 학원비 납부 완료  (3) 2024.09.23
맥북에어 M1 재사용 시작합니다.  (0) 2024.09.06
난 ENTJ  (3) 2024.09.03
오랜만에 써보는 에어플레이  (0) 2024.08.18

+ Recent posts