세상의 변화에 대해 관심이 많은 이들의 Tech Blog search

Graph Attention Networks (GAT) 설명

|

본 글에서는 2017년에 발표된 Graph Attention Networks라는 논문에 대한 Review를 진행할 것이다. 다방면에서 적용되는 Attention 개념을 Graph 구조의 데이터에 적용하는 초석을 마련한 논문이라고 할 수 있겠다. 자세한 내용은 논문 원본에서 확인하길 바라며 본 글에서는 핵심적인 부분만 다루도록 하겠다.

torch_geomectric을 이용하여 GAT를 사용하는 방법에 대해서 간단하게 Github에 올려두었으니 참고해도 좋을 것이다.


Graph Attention Networks 리뷰

1. Introduction

CNN은 image classification, semantic segmentation, machine translation 등 많은 분야에 성공적으로 적용되었지만, 이 때 데이터는 grid 구조로 표현되어 있어야 했다. 그런데 많은 분야의 데이터는 이렇게 grid 구조로 표현하기에 난감한 경우가 많다. 3D mesh, social network, telecommunication network, biological network 등이 그 예시라고 할 수 있다. 이러한 데이터는 Graph 구조로 표현할 수 있다.

굉장히 다양한 구조의 Graph를 다루기 위해 신경망을 확장하려는 시도는 지속되어 왔고, 초기 연구는 RNN으로 Graph 구조의 데이터를 다루고자 하였다. Graph Neural Network는 RNN의 일반화된 버전으로 소개되기 시작하였고 이후에 지속적으로 발전을 이어나갔다. 이후의 발전은 크게 2가지로 구분할 수 있을 것이다.

첫 번째는 Graph를 Spectral Representation으로 표현하는 것이다. Graph Laplacian의 eigen decomposition을 계산하는 Fourier domain으로 정의되는 합성곱 연산을 수행하는 것이 대표적인 방법이라고 할 수 있을 것인데, 이 연산을 통해 intense한 연산과 non-spatially localized한 filter를 만들어 낼 수 있다. 이러한 구조의 방법은 좀 더 세부적인 구조와 Feature의 특성을 반영하는데 특화되어 있지만 그 연산의 특성으로 인해, 새로운 구조의 Graph나 새로운 Node에 대해 대응하기 어려운 단점이 있다.

두 번째는 Non-spectral 혹은 Spatial Representaion으로 정의할 수 있겠다. 이는 합성곱을 Graph에 직접적으로 적용하고, spatially close한 이웃 그룹에 대해 연산을 수행하는 방법을 의미한다. 이러한 방법의 대표적인 예시가 바로 GraphSAGE이다. 이 알고리즘에 대해 자세히 알고 싶다면 이 글을 참조하면 될 것이다. 이러한 접근은 굉장히 scale이 큰 데이터에 대해 효과적인 접근으로 평가받고 있다.

위와 같은 최근 연구의 연장선에서, 본 논문에서는 Graph 구조의 데이터에 대해 Node Classification을 수행하기 위해 Attention 기반의 구조를 소개할 것이다. 연산은 효율적이며, 이웃들에 대해 각기 다른 weight을 지정함으로써 다른 degree(Node가 갖는 이웃의 수)를 갖는 Graph Node에 적용될 수 있다는 장점을 지니고 있다. 또한 이 모델은 Inductive Learning Problem에 직접적으로 적용될 수 있기 때문에 이전에 본 적이 없는 Graph에 대해서도 일반화할 수 있다는 큰 강점을 지닌다.


2. GAT architecture

2.1. Graph Attentional Layer

single Graph Attention Layer에 대해 설명할 것인데, 사실 이 layer가 본 논문에 소개된 GAT 구조에서 범용적으로 쓰인다. 본격적인 설명에 앞서 언제나 그렇듯 기호에 대해 잠시 정리하고 진행하겠다.

기호 설명
$N$ Node 수
$F$ Node의 Feature 수
$F^{\prime}$ Hidden Layer 길이
$W$ Trainable Parameter
$\vec{a}^{T}$ Trainable Parameter

아래와 같이 표현되는 Node Feature가 존재할 때,

[\mathbf{h} = { \vec{h}_1, \vec{h}_2, …, \vec{h}_N }]

위 $\mathbf{h}$ 행렬은 Layer를 통과한 후 $\mathbf{h}^{\prime}$ 의 형상을 취하게 될 것이며, 그 shape은 $N, F^{\prime}$ 이 될 것이다.

$W = (F^{\prime}, F), \mathbf{a} = (2F^{\prime}, 1)$ 의 shape을 갖고 있을 때 Attention Coeffieicient는 아래와 같이 정의된다.

[e_{ij} = a(\mathbf{W} \vec{h}_i, \mathbf{W} \vec{h}_j)]

위 식은 Node $i$ 에 대해 Node $j$ 의 Feature가 갖는 중요도를 의미한다. 이 때 $j$ 는 모든 Node를 의미하는 것은 아니고 $N_i$ 즉, Node $i$ 의 이웃에 대해서만 계산하게 된다. 최종적으로 softmax 함수를 통과하면 아래와 같은 Normalized Attention Score를 계산할 수 있다.

[\alpha_{ij} = {softmax}j (e{ij}) = \frac{exp(e_{ij})}{\Sigma_{k \in N_i} exp(e_{ik})}]

이전 식에서 $a$ 로 표기되었던 Attention Mechanism은 single-layer feedforward 신경망으로, 아래와 같이 학습 가능한 파라미터와 LeakyRELU activation 함수로 정의할 수 있다.

[\alpha_{ij} = \frac {exp (LeakyRELU ( \vec{a}^T [ \mathbf{W} \vec{h}i \vert \mathbf{W} \vec{h}_j ] )) } { \Sigma{k \in N_i} exp ( LeakyRELU ( \vec{a}^T [ \mathbf{W} \vec{h}_i \vert \mathbf{W} \vec{h}_k ] ) ) }]

이렇게 계산된 Attention Score는 아래와 같이 Node $i$의 이웃의 중요도를 결정하여 Input 데이터를 재정의하게 된다.

[\vec{h}^{\prime}i = \sigma( \Sigma{j \in N_i} \alpha_{ij} \mathbf{W} \vec{h}_j )]

이를 그림으로 나타내면 아래와 같다.

논문에서는 방금 설명한 Self Attention을 좀 더 안정화하기 위한 방법에 대해 상술하고 있는데 그 과정에 대해서는 아래 원문을 참조하길 바란다.

GCN과 달리 GAT는 같은 이웃 집단의 Node에 대해 다른 중요도를 배정하기 때문에 Model Capacity를 개선할 수 있으며 해석에 있어서도 도움을 주게 된다.

Attention Mechanism은 Graph의 모든 Edge에 공유되어 적용되기 때문에 전체 Graph에 대한 접근 없이도 학습이 진행될 수 있으며 이에 따라 Inductive Learning을 가능하게 한다.

GraphSAGE는 각 Node에 대해 고정된 수의 이웃을 추출하기 때문에 계산량을 일정하게 유지하게 되는데, 이는 추론을 행할 때 전체 이웃집단에 대해 접근할 수 없게 만드는 현상을 초래한다. 사실 본 논문에서는 LSTM Aggregator의 성능이 가장 좋았다고 기술하고 있는데, 이는 이웃 집단 내에서 각 이웃사이의 순서가 중요하다는 것을 암시하는 것과 다름이 없다. 만약 다른 Max Pooling Aggregator나 Mean Pooling Aggregator를 사용하였는데, 각 이웃 Node 사이의 순서 혹은 다른 개별적인 특징이 중요하다면, GraphSAGE는 이러한 부분까지는 커버하지 못하는 단점을 지니게 된다. 본 논문에서 제시하는 GAT는 이러한 한계에서 자유로우며 이웃 전체에 대해 접근하면서도 효율적으로 학습을 진행할 수 있다는 장점을 지닌다.


3. Evaluation

(중략)

3.4. Results

실험 결과에 대해서는 논문 원본을 참조하길 바란다.


4. Conclusion

본 논문에서는 Graph Neural Network (GAT)를 제시하였는데, 이 알고리즘은 masked self-attentional layer를 활용하여 Graph 구조의 데이터에 적용할 수 있는 새로운 Convolution-style의 신경망이다.

효율적인 연산과, 각기 다른 이웃 Node에 다른 중요도를 부과할 수 있다는 장점을 지니고 있으며 전체 Graph에 대한 접근 없이도 학습이 가능하기 때문에 Inductive Learning이 가능한 구조이다.


References

1) 논문 원본
2) 이분 그래프에 Attention 적용한 사례

Comment  Read more

Python time, datetime 사용법(Python 시간 다루기)

|

이 글에서는 Python 라이브러리인 time과 datetime에 대해 알아본다. 가끔 쓰는데 막상 쓰려면 언제 봐도 헷갈리는 라이브러리 중 하나인 듯 하다.


Import

import time
import datetime

time

현재 시각: time.time()

1970년 1월 1일 0시 0분 0초 이후 경과한 시간을 초 단위로 반환한다. 2021년 기준 대략 16억의 값을 가진다.

print(time.time())
# result
1620055042.444191

time 객체: time.localtime(secs)

float 형식의 seconds를 입력으로 주면 지역 시간대에 맞는 time 객체로 변환할 수 있다. 입력을 안 주면 현재 시간으로 계산한다.

반환된 값에서 .tm_year 등의 값을 그대로 가져올 수 있다. 연, 월, …, 초, 요일(tm_wday, 일요일=0, 토요일=6), 몇 번째 날짜(tm_yday, 1월 1일=0, 1월 2일=1), 일광 절약 시간(tm_isdst, 미적용=0, 적용=양수, 정보없음=음수)

print(time.localtime())
print(time.localtime(secs=time.time()))
print(time.localtime(time.time()).tm_year)
# result
time.struct_time(tm_year=2021, tm_mon=5, tm_mday=4, tm_hour=0, tm_min=19, 
                 tm_sec=51, tm_wday=1, tm_yday=124, tm_isdst=0)
time.struct_time(tm_year=2021, tm_mon=5, tm_mday=4, tm_hour=0, tm_min=19, 
                 tm_sec=51, tm_wday=1, tm_yday=124, tm_isdst=0)
2021

출력 포맷: time.strftime(format, time object)

datetime에도 비슷한 메서드가 있는데, string format time 정도라고 생각하면 된다.

time 객체가 주어지면 지정한 format으로 출력해준다.

now = time.localtime()
print(time.strftime('%Y%m%d', now))
print(time.strftime('%c', now))
print(time.strftime('%x', now))
print(time.strftime('%X', now))
print(time.strftime('%H%M%S', now))
# result
20210504
Tue May  4 00:41:07 2021
05/04/21
00:41:07
004107

출력 포맷 종류

출력 포맷은 다음과 같은 것이 있다.

Format Description Example
%c 날짜, 요일, 시간을 출력, 현재 시간대 기준 Tue May 4 00:33:26 2021
%x 날짜를 출력, 현재 시간대 기준 05/04/21
%X 시간을 출력, 현재 시간대 기준 00:33:26
%a 요일 줄임말 Sun, Mon, … Sat
%A 요일 Sunday, Monday, …, Saturday
%w 요일을 숫자로 표시, 월~일 0, 1, …, 6
%d 01, 02, …, 31
%b 월 줄임말 Jan, Feb, …, Dec
%B January, February, …, December
%m 숫자 월 01, 02, …, 12
%y 두 자릿수 연도 01, 02, …, 99
%Y 네 자릿수 연도 0001, 0002, …, 2017, 2018, 9999
%H 시(24hour) 00, 01, …, 23
%I 시(12hour) 01, 02, …, 12
%p AM, PM AM, PM
%M 00, 01, …, 59
%S 00, 01, …, 59
%Z 시간대 대한민국 표준시
%j 1월 1일부터 경과한 일수 001, 002, …, 366
%U 1년중 주차(월요일이 한 주의 시작) 00, 01, …, 53
%W 1년중 주차(월요일이 한 주의 시작) 00, 01, …, 53

datetime

현재 시각: datetime.datetime.today()

현재 시각 정보를 포함하는 datetime 객체를 반환한다. 연도부터 마이크로초까지 나온다.
물론 각 원소는 .year와 같이 접근할 수 있다.

print(datetime.datetime.today())
print(datetime.datetime.today().year)
# result
datetime.datetime(2021, 5, 4, 0, 44, 5, 707495)
2021

원하는 시각으로 datetime 객체 생성하기

메서드는 다음과 같이 생겼다. 연, 월, 일 등을 지정하여 datetime 객체를 생성할 수 있다.

datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0)

print(datetime.datetime(2021, 12, 25))
# result
2021-12-25 00:00:00

문자열로 datetime 객체 생성하기

문자열과 그 문자열이 어떻게 생겼는지를 지정하는 format을 같이 주면 datetime 객체가 생성된다.

d = datetime.datetime.strptime('20211225', '%Y%m%d')
print(type(d))
print(d)
# result
<class 'datetime.datetime'>
2021-12-25 00:00:00

(지속 업데이트 예정)



# result


References

Comment  Read more

Linux(Ubuntu) terminal 명령어 정리

|

이 글에서는 ubuntu terminal에서 사용하는 명령어를 정리한다.

Ctrl + F로 원하는 명령어를 검색하면 좋다.


파일 탐색 관련

ls 기본 옵션

상세히 출력하기

ls -l

출력 개수 제한

# 상위 4줄만 표시
ls | head -4

개수 세기

현재 위치에 있는 디렉토리 개수

하위 디렉토리는 체크하지 않으며, 현재 위치의 파일은 개수에 포함되지 않는다.

ls -l | grep ^d | wc -l

현재 위치에 있는 파일 개수

하위 디렉토리는 체크하지 않으며, 현재 위치의 디렉토리는 개수에 포함되지 않는다.

ls -l | grep ^- | wc -l

현재 디렉토리에 포함되는 전체 파일 개수

하위 디렉토리 내의 파일을 포함하며, 디렉토리는 개수에 포함되지 않는다.

find . -type f | wc -l

Find 사용

find는 파일을 검색하는 명령어이다. lsgrep을 조합하는 방법보다 효율적인 명령어라고 한다.

fine --help 명령어를 터미널에 입력하면 도움말을 볼 수 있다.

Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

기본 옵션은 -print이므로 그냥 find만 입력하면 현재+하위 디렉토리의 모든 파일을 보여준다. find .와 같다.

.
./cuda_11.1.1_455.32.00_linux.run
./cuda
./cuda/include
./cuda/include/cudnn_cnn_train.h
...

파일 타입별로 검색

find . -type -d
# -type -d는 디렉토리 타입만
# -type -f는 파일 타입만

# 결과 예시
.
./cuda
./cuda/include
./cuda/lib64

필터링 및 대소문자 (미)구분

-name <표현식>은 표현식 형식에 맞는 파일만 검색하는 옵션이다.(대소문자 구분)
-iname <표현식>은 대소문자를 구분하지 않는다.

find . -type f -iname "*.txt"
find . -type d -name "*lib*"

파일 수정 시간 필터링

  • -mmin : 수정시간 기준(분), modify + minute
  • -mtime: 수정시간 기준(일)
  • -cmin : 생성시간 기준(분), create + minute
  • -ctime: 생성시간 기준(일)
# 수정한 지 60분 이상 된 파일을 검색한다.
find . -mmin +60 -type f

파일 크기 필터링

# 100byte 이하 파일만 검색
find . -size -100c -type f
# 128kb 이상 파일만 검색
find . -size +128k -type f

현재+하위 디렉토리에서 특정 확장자 파일 모두 제거

# 아래는 확장자가 tsv인 파일을 찾아 제거한다.
find . -type f -name "*.tsv" -exec rm {} \;

파일 용량

전체 디렉토리 총 용량 표시

du 명령어는 현재 디렉토리(혹은 지정한 디렉토리) 및 그 하위 디렉토리의 총 용량을 전부 표시한다.

du # du .와 같다.
du /etc

특정 디렉토리 총 용량 표시

-s 옵션을 붙인다. kbyte 단위로 표시되며, MB, GB 등의 단위로 편하게 보려면 -h 옵션을 추가한다.

du -s /etc
du -sh /etc
du -sh /etc/*

특정 디렉토리 및 하위 n단계 디렉토리 총 용량 표시

-d <number> 옵션을 붙인다. 아래 예시는 /etc 및 바로 아래 포함된 디렉토리만의 총 용량을 표시한다.

du -d 1 /etc

디렉토리 및 파일의 용량 표시

du 명령어에서 -a 옵션을 붙이면 하위 파일의 용량까지 같이 표시할 수 있다.

du -a /etc

디스크 사용량

df 명령어를 사용한다. 위와 마찬가지로 편한 단위로 보려면 -h 옵션을 쓴다.

df
df -h

압축 관련

zip, unzip

여러 파일 압축 한 번에 풀기

unzip '<zipfiles>' [-d <dir>]의 형식이다.

따옴표를 쓰지 않으면 filename not matched 에러가 뜬다.

unzip '*.zip' -d data/

Process 관련

Defunct Process

Defunct Process(좀비 프로세스) 찾기

ps -ef | grep defunct | grep -v grep

Defunct Process(좀비 프로세스) 개수 출력

ps -ef | grep defunct | grep -v grep | wc -l

defunct(zombie) process(좀비 프로세스) 죽이기

ps -ef | grep defunct | awk '{print $3}' | xargs kill -9

Kill process

sudo kill -9 $PID

Nvidia-smi

0.5초마다 업데이트

watch -d -n 0.5 nvidia-smi

PATH 확인

cuda 위치 확인

보통 /usr/local/cuda에 있다.

locate cuda | grep /cuda$
# or
find / -type d -name cuda 2>/dev/null

기타

오류 해결

\r command not found

파일에 ‘\r’이 포함되어 코드가 제대로 작동하지 않는 오류(보통 운영체제의 차이로 인해 발생). 다음 코드를 수행하면 해결된다.

sed -i 's/\r$//' <filename>

(지속 업데이트 예정)

Comment  Read more

LINK 코인(라인코인) 2021 계획 및 백서 요약

|

이 글에서는 라인 블록체인 사업의 일부인 링크코인에 대한 내용을 정리한다.

2021년 링크코인 계획(notice)와 백서(white paper)를 요약 정리하였다.
그림을 포함 내용의 출처는 글의 최하단에서 찾을 수 있다.


2021년 계획

목적

  • LINE Blockchain 생태계 확장
  • LINE Blockchain 프로젝트의 투명성과 이해도를 증가, 확장하여 LINE Blockchain 생태계의 health를 보장하고자 함

요약

  • LINE Blockchain은 2018년 시작되어 토큰경제와 블록체인을 구현하기 위한 기본 플랫폼과 조절체계(regulatory system)을 구축해 왔음
  • LINE Blockchain은 LINK의 유동성과 유용성을 확장하기 위한 의도를 갖고 있으며 LINE Blockchain의 대중화를 실현시키고자 함.
    • 이는 2021년 시작한 블록체인 기반 dApps(댑)과 새로운 서비스를 확장하여 이루고자 함

계획

  1. 사업 계획
    1. LINK가 있는 곳에 환전 기능 추가
    2. 결제 시스템과 제휴
    3. NFT-관련 서비스 확장
    4. dApps의 확장
  2. LINK 발행 계획
    1. 발행 및 배포 계획: LINK를 결제와 대출의 수단으로 쓰는 사람들에 대한 reward, DApps 가속화 등에 사용
    2. 추가 유통량
      • 기간: 2021.01.01 ~ 2021.12.31
      • 실제 배포 시점에 기반한 가격으로 1~2천만 엔 수준
      • LINK로 계산하면 41만~83만 LN(30일 평균 종가 기준)
      • 6.86~13.72%만큼 발행됨
    3. 발행량 정의
      • 초기 3년간 최대 1억 LN으로 제한되며, 이후로는 연간 5%씩 증가한다. 즉 1억 5백만, 1억 1025만, …
      • 발행 한계는 유통량을 의미하지는 않는다. 실제 발행량은 시장의 상황에 따라 변동된다.
      • 첫 발행이 2018년 9월 3일이기 때문에 “초기 3년”은 2021년 9월 4일에 종료된다.

Q&A(Jan 2021)

  • 추가 상장은 검토 중에 있다.
  • 발행 한도 증가 계획은 없고 신규 발행은 전부 공식 홈페이지에서 발 수 있다.
  • Node의 수를 증가시킬 계획은 현재는 없다.
  • LN의 매매제한 정책이나 이자상품 한도 등의 변경 계획은 답변하지 어려우나 최대한 많은 사람들이 쉽게 접근할 수 있도록 할 계획이다.
  • LN의 실 사용 계획은?
    • 쉽게 사용할 수 있고 보유 혹은 결제 시 혜택을 줄 수 있도록 하는 것이 주 목표
    • 그냥 자산으로서 존재하는 것이 아닌 실생활과 긴밀하게 연결될 수 있도록 할 계획
  • 개인이나 기관에 직접 판매하지 않으며 그럴 계획은 없다고 한다.
  • 현재 정책 등은 금융규제 방향에 맞추어 계속해서 변화할 수 있다.


Factbook

  • 라인과 블록체인 역사
  • LINE Blockchain 역사
    • 거래소는 Bitmax에서 Bitfront로 2020년 변경되었다.

LINE BlockChain

라인 블록체인은 다음 4가지로 구성되어 있다.

  1. LINK(Chrypto Asset)
  2. Crypto Asset이 운용되는 MainNet
  3. MainNet의 쉽고 편리한 분산어플리케이션을 구축할 수 있게 돕는 Platform
    • 가치의 저장, 전송, 소유의 증명 등 금융 기능에 집중한 부분
    • Virtual Machine, Consensus Algorithm, Blockchain Privacy 제공
    • 안정성, 성능의 확장성, 추적 가능한 익명성을 확보
    • 거래의 확정성(BFT Altorithm), PoS, VFT, 지분 증명 기능, 탈중앙화 등을 얻을 수 있음.
  4. Line CBDC Platform

여러 곳과 협업 중:

LINE Blockchain Mainnet

  • 2초마다 블록 생성
  • 수십만 개의 contribution mining, user 수 등
  • 일본에서 28번째로 등록된 디지털 자산
  • (2021년 1월) $90M의 시가총액
  • 절반 정도의 LN이 deposited되어 있다.

BlockChain Platform

LINE Blockchain Developers

  • 자신의 시스템에 블록체인 기술을 적용가능하도록 지원한다.
  • Developer Console, Open API, Wallet Integration 등을 제공한다.

BITMAX Wallet

  • 라인 계정과 통합되며, Token Management가 이루어진다.
  • dApp Browser가 있어서 라인 블록체인에 기반한 서비스를 이용할 수 있다.

Token Econoomy Flow

서비스 성장에 적극적으로 기여(Contribution Mining)한 유저에게 보상을 할 수 있고, 그것은 LINK 화폐로 이루어질 수 있다.

  • 일본에서 주로 서비스된다.
  • 라인 메신저 안에서 거래가 가능하다(dApp Browser).
  • 상황에 따라 달라질 수 있지만 12% 이자 상품이 있다.


References

Comment  Read more

중국 보험업의 선두 주자, 평안보험(Ping An of China)

|

본 글은 2021년 4월에 작성되었으며, 시간이 지남에 따라 본 글에 포함된 정보에는 변동이 발생한다 점을 기억해두시기 바라며, 개인적인 공부와 기록을 위해 작성되었기 때문에 오류 및 주관적 해석이 포함되어 있을 수 있기 때문에 오직 참고용으로만 활용하시기 바랍니다.

아직도 전 세계적으로는 코로나19의 그늘에서 벗어나지 못하고 있지만, G2라 불리는 미국과 중국의 상황은 조금 다르다. 물론 백신 보급이 끝난 것도 아니고 국지적으로 여러 문제가 지속적으로 발생하고 있지만, 많은 기관들이 미국과 중국의 빠른 경기 회복과 경제 성장을 전망하고 있다.

본 글에서는 중국의 경기 회복 및 경제 성장과 맞물려 실적 회복이 예상되면서도 장기적으로 성장할 수 있는 기업으로 판단되는 평안보험, 601318 SHA에 대해 알아볼 것이다.

1. Background

로고에서도 드러나듯, 이 기업은 테크와 금융을 결합한 기업이다. 보험업을 중심으로 보험, 증권, 은행업을 영위하고 있는 종합 금융회사이며, 핀테크/헬스케어 자회사를 두고 있다. 2020년 기준 중국에서 생명보험 1위, 손해보험 2위의 자리를 차지하고 있기도 하다. 2019년만해도 생명보험 2위였으나 지속적인 성장을 통해 1위의 자리를 차지한 것으로 보인다.

아래는 2020년 말 중국의 증권매체 증권시보와 증시정보 플랫폼 수쥐바오가 제시한 유망한 중국 경기 순환주 리스트의 일부이다.

평안보험이 가장 높은 순위를 차지하고 있는데, 이들 매체에 따르면 앞으로 주목할 만한 순이익 증가율을 보여줄 것으로 기대된다고 한다.

2. Financials

2020년 1분기 기준 이익구조는 아래와 같다.

구성은 위와 같지만 절대적인 순이익의 경우 2019년 1분기에 비해 42.7% 감소한 수치를 보여주었는데, 이는 금융 위기 이후 처음으로 역성장한 것이라고 한다.

미래에셋대우의 강효주 연구원님의 리포트를 참고하면, 오프라인 영업의 중단으로 설계사 위주로 판매되던 고마진의 보장성 보험 업무가 큰 타격을 받았다고 한다.

코로나19가 완전히 종식된 것은 아니지만, 중국은 (적어도 미디어를 통해 본 바로는) 특히 유럽이나 신흥국에 비해 빠르게 회복하고 있는 것으로 보이며 이에 따라 평안 보험의 실적도 2021년에는 상당 부분 회복될 것으로 기대된다.

평안 보험의 2020년까지의 실적과 앞으로의 실적 전망치는 아래와 같다.

삼성증권 리포트에 따르면 매출과 영업이익의 드라마틱한 성장보다는 순이익이 증가함에 따라 EPS의 성장을 전망하는 것으로 보인다. (리포트마다 수치가 조금씩 다르다.) 실제로 보험회사의 경우 2020년까지 이어져온 저금리 추세로 인해 수익성이 지속적으로 악화되어 왔다. 우리나라 보험사의 경우도 생보사 손보사 할 것 없이 2014년 이후 운용자산이익률은 4% 대에서 3%대로 하락하였다.

과거에 판매하였던 확정형 고금리 상품이 현재 상황에서는 보험사의 발목을 잡고 있는 셈이다. 중국 보험사들의 상황도 크게 다르지 않았고, 평안보험 역시 저금리 기조에 따라 손해를 피할 수는 없었다.

다만 코로나19에서 점차적으로 회복하면서 경기 정상화와 기업들의 실적 향상이 기대됨에 따라 금리 상승에 대한 기대감이 점차적으로 커지고 있다. 이러한 상승 추세가 일시적으로 끝날지 혹은 지속될지에 대해서는 의견이 분분하지만 적어도 당분간은 상승국면에 접어들 것이라는 의견이 지배적이다.

이에 따라 평안보험의 2021년 수익은 일정 부분 정상화될 가능성이 높아보이고, 오프라인 대면 영업 실적 또한 회복된다면 긍정적인 실적을 기록할 수 있을 것으로 예상된다.

3. 투자 포인트

우리나라에서는 이미 보험업은 성장을 멈춘 산업으로 평가받고 있지만, 중국의 경우는 그렇지 않다. 중국에서의 보험업은 성장하는 산업이다. 중국의 보험시장 침투율은 글로벌 최하위 수준이며, 향후 지속적인 성장이 기대되고 있다. (미국의 GDP 대비 보험침투율은 11%, 중국은 4% 수준이다.) 중국의 GDP 성장폭 또한 과거에 비해 둔화되었고, 인구 구조 또한 서서히 선진국과 유사하게 바뀌고 있다면 중국의 보험 시장은 다른 선진국들이 수십년 전에 걸어왔던 길을 비슷하게 걸어갈 가능성이 매우 높다고 할 수 있다.

평안보험은 위 주가 그래프를 보면 알 수 있듯이, 꾸준히 성장해온 기업이다. 최근 중국의 유동성 조절 작업 등과 맞물려 주가가 조정을 받고는 있지만 장기적으로 우상향 추세를 그리고 있다. 시장의 성장성은 분명하고, 평안보험이 성장하는 시장 속에서 지금과 같은, 혹은 더 큰 점유율을 보여준다면 평안보험에 투자할 가치는 충분하다고 생각할 수 있다.

캐시 카우 역할을 하는 전통 보험업과 더불어 평안보험에는 주목할 만한 부분이 더 존재한다. 먼저 글의 서두에서도 밝혔듯이 본 기업은 기술에도 많은 투자를 하는 기업이다. 매출의 1%에 해당하는 1.6조원 정도를 매년 기술 발전에 투자하고 있는 기업이며 2020년 말 기준 31,000건의 핀테크, AI관련 특허 보유하고 있는 기업이다.

사실 우리나라의 은행, 보험회사들을 생각해보면 최근 들어서야 IT관련 인력들을 채용하고 늦게나마 디지털 타이틀을 달고 혁신을 외치고 있는 형국인데, 평안보험은 2008년에 평안테크놀로지라는 자회사를 설립하면서 핀테크 연구를 시작했을 정도로 오래된 내공을 자랑하고 있다. 지난 10년간 이 자회사는 인슈어테크 분야에 누적 17조원을 투자해왔고, 향후 5년 동안 같은 금액을 추가로 투자할 계획이라고 한다.

이러한 평안보험의 디지털에 대한 투자는 매력적인 자회사들을 통해서도 나타난다. 사실 평안보험 산하에는 여러 자회사들이 있는데, 가장 대표적인 회사로는 다음 기업들을 뽑을 수 있겠다.

루닷컴, 금융이장통, 평안굿닥터

앞의 2개의 기업은 핀테크, 평안굿닥터는 원격의료 헬스케어 기업이다. 모두 유니콘 급 기업들이며 앞으로의 성장성이 매우 기대되는 기업이라고 할 수 있다.

루닷컴의 경우 온라인 자산관리를 주 사업으로 영위하고 있으며 지방 정부에 금융서비스를 제공하기도 한다. KPMG가 선정한 글로벌 100대 핀테크 기업 중 10위를 차지하기도 하였다. 금융이장통은 핀테크 기술을 만들어서 이를 판매하는 기업으로 대표적인 상품으로는 스마트 보험 시스템 등이 있다. 평안굿닥터 역시 치킨게임을 통해 5개 정도의 기업만이 살아남은 중국 원격의료 기업 중 1위를 차지하고 있다.

4. Wrap-up

중국 기업에 투자하는 것은 한국, 미국 기업에 투자하는 것에 비해 진입장벽이 좀 있는 편이다. 중국어를 유창하게 하는 것이 아니라면 정보 접근성도 제한되고, 아무래도 정치적인 리스크가 크다보니 이에 대한 대응을 하기는 쉽지는 않다.

따라서 중국 기업에 투자할 때는 탄탄한 사업 모델과 강한 시장 지배력을 갖고 있는 기업에 투자하는 것이 안정적이라고 판단하는 바, 평안보험은 이러한 조건에 들어 맞을 가능성이 높은 기업으로 생각한다.

2020년 대표적인 리스크로 언급되었던 오프라인 대면 영업 감소와 저금리로 인한 수익성 악화가 2021년에 상당 부분 턴어라운드할 것으로 보여 기대감이 일고 있는 상황에서, 실제로 이 기대감을 충족시킬 수 있는 실적을 내놓을 수 있을지 살펴보면서 투자를 고려하는 것이 필요할 것이다.


References
1) 미래에셋대우 리서치센터
2) KB증권 리서치센터

Comment  Read more