Gorio Tech Blog search

Linux(Ubuntu) terminal 명령어 정리

|

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

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


파일 탐색 관련

ls 기본 옵션

심심하면 입력하는 기본 명령

ls

상세히 출력하기

# -l 옵션은 파일 권한, 생성/수정한 user, 파일 크기, 수정 시각 등의 자세한 옵션을 표시한다.
# -h 옵션은 -l과 같이 쓰면 파일 크기를 알아보기 쉽게 표시해준다.
# -a 옵션은 숨겨진 파일 혹은 링크까지 같이 표시해준다.
ls -ahl

출력 개수 제한

# 상위 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

Symbolic link 관련

hard link과 symbolic link 두 종류가 존재하는데, 둘 다 바로가기 같은 개념이지만 차이가 조금 있다.

  • ln 뒤에 -s 옵션을 주면 symbolic link로 생성된다.
  • 원본 파일과 hard link 파일은 디스크에서 완전히 동일한 파일이다.
  • symbolic link 파일은 원본과는 다른 파일이고 링크만 가지고 있다.
# 원본 경로는 파일일 수도, directory일 수도 있다.
ln -s <원본 경로> <link 경로>
ln -s ~/data/Charades/Charades_v1_480/  dataset/ag/videos
# hard link는 -s 옵션을 붙이지 않는다.
ln <원본 경로> <link 경로>

링크 삭제

rm -f <link 경로>
rm -f dataset/ag/videos
# 경로 마지막에 /를 붙이면 삭제가 되지 않는다.

폴더에 대한 삭제나 파일에 대한 삭제 모두 rm -f로 삭제할 수 있다. 원본은 삭제되지 않는다.
rm -rf로 삭제하면 원본이 삭제된다.

참고로, symbolic link의 원본을 삭제하면 link는 존재하지만 실제로 파일에 접근할 수는 없다.
ls 등의 명령어로 확인하면 빨간색으로 표시된다.

hard link의 경우에는 원본을 삭제해도 (원본의 복사본) 파일에 접근 가능하다.


압축 관련

zip, unzip

압축하기

zip <압축파일명.zip> [-r] <압축할 파일or디렉토리 path 1> [ <압축할 파일or디렉토리 path 2> ...]
zip gorio.zip gorio1.txt gorio2.txt
zip gorio.zip -r gorio_dir/
zip gorio.zip -r ./Downloads/*
# ...

압축풀기

unzip <filename>
# 해제된 파일들이 저장될 디렉토리를 지정하고 싶으면 -d 옵션을 사용한다.(d=directory)
unzip <filename> -d <path>

여러 압축파일 한 번에 풀기

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

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

# 여러 압축 파일을 지정해도 된다.
unzip a.zip b.zip c.zip
# 전부를 지정할 수도 있다. 이때는 따옴표를 꼭 써 줘야 한다.
unzip '*.zip' -d data/

tar, tar.gz

용량을 줄이는 압축 방법은 tar.gz 형식으로 압축하는 것이고, tar 형식은 단지 하나의 파일로 합치는 archiving 방식이다.

tar.gz로 처리하려면 옵션에 z를 더 붙이면 된다.

옵션 설명은 아래와 같다.

  • -c : 파일을 tar로 묶음
  • -x : tar 압축을 풀때 사용함
  • -v : 묶거나 파일을 풀때 과정을 화면에 출력
  • -f : 파일이름을 지정
  • -z : gzip으로 압축하거나 해제
  • -C : 경로를 지정
  • -p : 파일 권한을 저장

압축하기: tar -cvf, tar -zcvf

# 디렉토리를 tar로 압축하기
tar -cvf [압축파일명.tar] [압축하기위한 디렉토리]
# 파일들을 tar로 압축하기
tar -cvf [압축파일명.tar] [파일1] [파일2] [...]

# 디렉토리를 tar.gz로 압축하기
tar -zcvf [압축파일명.tar.gz] [압축하기위한 디렉토리]
# 파일 tar.gz 압축하기
tar -zcvf [압축파일명.tar.gz] [파일1] [파일2] [...]

압축풀기: tar -xvf, tar -zxvf

-c 옵션을 -x로 바꿔주기만 하면 된다.

# tar 파일 압축풀기
tar -xvf [압축파일명.tar]

# tar.gz 파일 압축풀기
tar -zxvf [압축파일명.tar.gz] 

여러 압축파일 한 번에 풀기

tar 또는 tar.gz 확장자를 갖는 파일들을 찾고 위의 압축풀기 명령을 각각에 대해 수행하는 코드이다.

# tar 형식
find . -name '*.tar' -exec tar -xvf {} \;
# tar.gz 형식
find . -name '*.tar.gz' -exec tar zxvf {} \;

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

금리 상승기에 주목해야 하는 ETF, Vanguard Financials ETF (VFH)

|

본 글은 2021년 4월에 작성되었으며, 시간이 지남에 따라 본 글에 포함된 정보에는 변동이 발생한다는 점을 꼭 염두에 두시기 바랍니다.

인덱스 펀드의 창시자 존 보글이 창립한 Vanguard의 ETF 중 하나인 VFH ETF는 대표적인 미국의 금융주 ETF이다.

최근 몇 달 간 미 국채 금리의 상승과 장단기 금리차 확대, 그리고 경기 회복에 대한 기대감등이 맞물리면서 본 ETF는 큰 조정 없이 꾸준한 상승을 기록하였다.

사실 지금 시기에 VFH 혹은 VFH에 포함된 종목들을 매수하는 것이 아주 현명한 판단인지에 대해서는 확답을 내리기 어렵다. 코로나19 이전의 주가를 넘어 사상 최고치를 경신하고 있는 경우도 발생하고 있는데, 과연 이것이 적절한 기대감의 반영인지, 과도한 선 반영인지는 시간이 지난 다음에야 정확히 알 수 있을 것이다.

사실 현재의 주가 상승은 적어도 작년 말 백신 개발 소식 이후 더욱 본격적으로 리플레이션 트레이딩이 대두되기 시작 했을 때에는 본 종목을 매수한 투자자들이 누려야 할 이익이지, 이제 와서 매수를 고려할 단계는 아니라고 주장하는 전문가들도 많고, 필자도 이에 대해 상당 부분 동의하는 바이다.

그럼에도 불구하고 이 ETF와 그에 속한 종목들에 대해 다시 한 번 짚고 넘어가야하는 이유는 다음과 같다.

1) 디플레이션 압박의 강도에 따라 상황이 바뀔 수는 있지만, 현재로서는 당분간 금리의 상승과 장단기 금리차의 확대가 지속될 가능성이 높고, 이에 따라 금융주들의 수익성은 더욱 향상될 가능성이 높다.
2) 지금 당장은 크게 영향을 받지 않겠지만, 코로나19 기간 동안 Square, Social Finance, Lemonade와 같은 새로운 형태의 금융 기업들이 큰 주목을 받았는데 이러한 기업들과의 관계에 대해 앞으로도 지속적으로 주목해보아야 한다.

VFH는 미국 기업만을 포함하고 있으며 주요 기업들의 목록은 아래와 같다.

은행, 보험, 투자은행 회사들이 주류를 이루고 있으며, TOP 10의 회사들의 점유율은 41.5%에 달한다. JP모건, 버크셔 해서웨이, 뱅크오브아메리카 등 미국의 굵직한 전통 금융사들을 담은 ETF라고 할 수 있다.

2021년 4월 4일 기준 배당률은 약 1.9% 정도이며, ETF에 대한 보다 상세한 정보를 알고 싶다면 아래 페이지들을 참조하길 바란다.

ETF닷컴, Seeking Alpha

유동성 장세에서 실적 장세로 넘어가고 있는 지금, 실적 장세의 길이에 대한 의견은 상당히 분분한 편이다. 강세장의 초입이라고 주장하는 전문가들은 실적이 우수한 기업들의 경우 앞으로 좋은 주가 흐름을 보일 것이라고 예상하고 있고, 강세장의 후기라고 주장하는 전문가들이나 버블을 경고하는 전문가들은 실적 장세가 그리 오래 가지 않을 수도 있다고 이야기하고 있다.

어떤 의견이 정확히 들어 맞을지 확신하기는 어려우나, 본 ETF에 포함된 주요 종목들은 2021년 미국의 경기 회복과 더불어 좋은 실적을 발표할 가능성이 높은 기업들에 해당한다. 따라서 드라마틱한 수익률을 기대할 수는 없겠지만, 최근 흐름을 살펴볼 때 단기, 중기적으로 포트폴리오에 포함하는 것을 고려해볼 수 있지 않을까 생각해본다.

그리고 더 나아가서, 이러한 전통 금융주들이 앞으로 어떻게 경쟁력을 강화해 나갈 수 있을 지에 대한 공부도 지속하면 좋을 것이다. 이들의 오랜 역사와 경력, 시장에서의 영향력이 굉장히 큰 것은 사실이다. 그러나 특히 전통 은행들의 경우 그 규모가 큰 만큼 혁신의 속도는 시대를 따라가지 못할 가능성이 있다. 따라서 단순히 금리 상승이라는 이유만으로 이들에 대한 매수를 고려하기 보다는, 전반적인 경제 상황과 각 기업의 경쟁력을 분석해보고 투자의 기간을 결정하는 것이 현명할 것이다.

Comment  Read more

PinSAGE (Graph Convolutional Neural Networks for Web-Scale Recommender Systems) 설명

|

본 글에서는 2018년에 발표된 Graph Convolutional Neural Networks for Web-Scale Recommender Systems란 논문에 대한 Review를 진행할 것이다. 본 논문은 Graph 구조의 신경망을 Pinterest의 추천 시스템에 어떻게 적용하였는지에 대한 내용을 담고 있으며 이전 글에 설명하였던 GraphSAGE의 후속편으로 이해해도 좋을 것 같다.


Graph Convolutional Neural Networks for Web-Scale Recommender Systems 리뷰

1. Introduction

(전략)

본 논문에서는 굉장히 확장 가능성이 높은 GCN 프레임워크를 소개할 것이고, 이는 Pinterest에서 상용화되었다. PinSAGE라고 이름 붙인 Random-Walk 기반의 GCN은 일반적인 GCN의 적용 사례보다 훨씬 더 큰, 3B Node, 18B Edege 크기의 대형 그래프에 적용되었다. 즉 PinSAGE는 몇몇 주요 인사이트를 활용하여 GCN의 확장 가능성을 크게 개선한 것이라고 볼 수 있다.

본 알고리즘은 크게 2가지 측면에서 개선이 이루어졌다. 먼저, 펀더멘탈 측면에서 보자.

1) On-the-fly Convolutions
첫 번째로 기존 GCN 알고리즘들이 전체 그래프 라플라시안을 이용하여 변수 행렬을 곱했던 형식을 적용한 것과 달리 PinSAGE은 Node 주변의 이웃들을 Sampling하고 이에 대해 합성곱을 적용한 방식을 사용하였다. 이는 GraphSAGE에서의 방식과 유사하다.

2) Producer-consumer minibatch construction
CPU-bound producer는 효율적으로 Node 주변의 이웃을 추출하고 합성곱에 필요한 변수들을 준비해놓는다. 반면 GPU-bound Tensorflow Model은 미리 정의된 계산 그래프에서 효율적인 Stochastic Gradient Descent를 수행하게 된다.

3) Efficient MapReduce Inference
반복적 연산은 최소화하면서 학습된 모델이 수많은 Node에 대해 임베딩을 빠르게 생성할 수 있도록 하였다.

다음으로는 새로운 학습 테크닉에 대해 간단히 살펴보겠다.

1) Constructing Convolutions via Random Walks
앞서 이웃을 Sampling 한다고 하였는데 단순히 무작위 추출은 효율적이지 못하다. 본 논문에서는 연산 그래프를 추출하기 위해 작은 Random Walk를 활용하는 테크닉을 적용하였다. 각 Node는 Importance Score를 갖고 있고 이는 Pooling/Aggregation 단계에서 활용된다.

2) Importance Pooling
Random Walk 유사성 측정에 기반하여 Aggregation 단계에서 Node Feature의 중요도에 따라 가중치를 부여하는 방식을 적용하여 46%의 성능 향상을 이끌어내었다.

3) Curriculum Training
학습이 지속될 수록 더 어려운 학습셋을 제공하는 방식을 통해 12%의 성능 향상을 이끌어내었다.

PinSAGE는 Pinterest의 여러 추천 task에 활용되었다. 온라인 컨텐츠의 시각적 북마크라고 할 수 있는 Pin을 고객들에게 맞춤식으로 제공하는 것이 대표적이다. 고객들은 이러한 Pin들 중 유사한 것들을 모아 Board를 통해 집합적으로 구성하게 된다. 결국 Pinterest가 제공하는 것은, 2B가 넘는 Pin과 1B가 넘는 Borad로 이루어진, 세계에서 가장 큰 고객 맞춤형 이미지 그래프인 것이다.


논문을 직접 참고하길 바란다. 한 가지만 언급하자면, PinSAGE은 전체 Graph를 GPU 메모리에 저장할 필요가 없게 만듦으로써 GraphSAGE를 개선하였다.


3. Method

3.1. Problem Setup

Pin과 Board에 대해서는 앞서 설명하였다. Pinterest의 목적은 Pin에 대한 고품질의 Embedding 혹은 Representation을 얻는 것이다. 이를 위해서는 우리는 Pinterest 환경을 이분 그래프 형태로 모델링하였다. 이 때 Node의 종류로는 $I$ (Pin)와 $C$ (Board)가 있을 것이다. 다만 본 논문에서는 $I$ 는 Item의 집합으로 간주하였고, $C$ 는 고객을 정의하는 Context의 집합으로 보았다. 즉 일반적으로 생각하는 User-Item 구조가 아닌 것이다.

Pin(Item)은 어떤 실수 attribute인 $x_u \in \mathbb(R)^d$ 와 관련되어 있는 것으로 가정하였다. 이것은 Raw Feature를 의미하는데 Item에 대한 메타데이터나 컨텐츠 정보를 의미하게 될 것이다.

최종적으로 만들어진 Embedding은 Nearest Neighbor Lookup을 통해 Candidate Generation 형태로 활용되거나 Candidate에 랭킹을 매키는 머신러닝 시스템에서 Feature의 형태로 활용될 것이다.

본 논문에서는 전체 그래프의 Node Set을 $\mathcal{V} = \mathcal{I} \cup \mathcal{C}$ 라 표기할 것이다. 이는 Pin과 Board를 명시적으로 구분하지 않음을 뜻한다. 이러한 Setting은 Pinterest의 시스템 하에서 가능한 것이고, 일반적인 User-Item 추천 시스템에서는 변형이 필요할 것이다.

3.2. Model Architecture

Input Node Feature가 주어지면 그래프 구조를 통해 Node Embedding을 계산하도록 변형&통합하는 신경망을 통과하게 된다.

Node $u$ 에 대해 Embedding $z_u$ 를 얻는 과정은 아래와 같다.

기본적인 전개는 GraphSAGE와 유사하니 생략하고 달라진 부분에 대해서만 정리하도록 하겠다.

위 과정에서 $\gamma$ 는 원소평균 또는 가중합 함수를 의미한다. $u$ 의 지역 이웃은 $n_u$ 로, $u$ 의 현재 Hidden Representation은 $h_u$ 로 표기한다.

Importance-based Pooling에 대해 설명할 차례이다. 이전 GCN 알고리즘들은 단순히 k-hop 이웃을 확인하였다면, PinSAGE의 경우 이웃을 무작위로 선별하지 않는다. Node $u$ 에 대해 가장 큰 영향을 미치는 $T$ 개의 Sample을 추출하는 방법을 사용할 것이다. 구체적으로, Node $u$ 로부터 시작하여 Random Walk를 수행한 후, 이 Random Walk에서 만나게 되는 Nodes의 만남 횟수를 기록하고 이에 L1 정규화를 적용하게 된다. Node $u$ 의 이웃은 이렇게 기록된 정규화된 방문 횟수가 가장 높은 $T$ 개의 Node들로 정의되게 된다.

이러한 방법은 메모리를 절약하고 중요도를 고려한 이웃을 추출할 수 있다는 장점을 지닌다.

파라미터에 대해 정리해보겠다. 위 알고르짐에서 학습 가능한 파라미터는 $\mathbf{Q, q, W, w}$ 이다. 그리고 이들은 어떤 k번째 Layer이냐에 따라 독립적으로 학습된다. 즉 $\mathbf{Q^{(1)}, Q^{(2)}}$ 가 존재한다는 것이다. 이 또한 GraphSAGE와 같은 설정이다. 각 합성곱 Layer를 통과한 Hidden Representation 벡터의 길이는 $d$ 이며, 최종 임베딩 벡터의 길이 또한 $d$ 이다.

3.3. Model Training

본 논문에서 PinSAGEMax-margin Ranking Loss를 통해 학습되었다. 라벨링된 아이템 쌍 집합인 $\mathcal{L}$ 을 갖고 있다고 하자, 이 때 Item 쌍 $(q, i) \in \mathcal{L}$ 은 서로 관련이 있다고 정의된다. 이 때 $q$ 는 query item을 뜻하는데 위와 같은 표기는 Item $i$ 가 query item $q$ 에 좋은 추천이 된다는 뜻이다. 예를 들어 어떤 사람이 $q$ 라는 Item을 과거에 이용한 적이 있다면 이 사람에게 $i$ 라는 Item을 추천해줄 수 있을 것이다.

학습 과정의 목표는 라벨링된 $(q, i) \in \mathcal{L}$ 쌍의 최종 Embedding이 유사한 값을 갖게 만드는 것이다. 이제 학습 과정 상의 주요 포인트들에 대해 알아보자.

Loss Function
Positive Example 사이의 내적 값은 크게 하고, Negative Example 사이의 내적 값은 작게 만드는 것이 이 손실 함수의 기본적인 생각이다. 식은 아래와 같다.

[J_{\mathcal{G}} (z_q z_i) = \mathbb{E}{n_k \sim P_n (q)} max( 0, z_q * z{n_k} - z_z * z_i + \Delta )]

이 때 $P_n(q)$ 는 item $q$ 를 위한 Negative Example의 분포를 의미하며, $\Delta$ 는 Margin Hyper-parameter이다.

Multi-GPU training with large minibathces
각 미니 배치를 같은 크기로 나눈다. 각 GPU는 미니배치의 한 부분씩을 담당하게 되고 같은 파라미터셋으로 연산을 수행한다. 역전파가 수행될 때 모든 GPU에 존재하는 각 파라미터들의 Gradient는 공유되며 동기식 SGD가 수행된다. 배치의 크기는 512 ~ 4096 사이의 숫자를 사용한다.

Producer-consumer minibatch constructions
(전략)
GPU는 모델 계산을, CPU는 Feature를 추출하고 재색인을 수행하며, Negative Sampling의 역할을 맡는다.

Sampling Negative Items
본 논문에서는 한 미니 배치에서 500개의 Negative Item이 공유되도록 설정하였다. 그런데 이 500개를 전체 Item 집합에서 무작위 추출을 통해 뽑는다면, 학습은 너무 쉬울 것이다. 왜냐하면 무작위로 뽑은 500개의 Item과 Query Item과의 내적 값은 Positive Example과의 내적 값에 비해 작을 확률이 매우 크기 때문이다. 따라서 본 논문에서는 다른 방법을 도입하였다.

각 Positive Training Example에 어려운 Negative Example을 추가하였다. 즉, Query Item과 어느 정도 관련은 있지만 Positive Example 만큼 관련있지는 않은 Item을 추가한 것이다.

이러한 어려운 Negative Example은 Query Item에 대한 개인화된 PageRank Score에 따라 그래프에서 Item에 대한 순위를 매김으로써 생성되며 2000~5000위 사이의 Item을 어려운 Negative Example라고 정의하였다.

이러한 학습 방식을 적용하였을 때, 그렇지 않았을 때에 비하여 2배의 Epoch이 필요하다. 본 논문에서는 수렴을 위해 Curriculumn Training 방식을 도입하였다. 1 Epoch에서는 어려운 Negative Example을 추가하지 않고 학습을 시킨다. 이후에서는 각 Query Item 마다 1개의 어려운 Negative Example을 추가한다. Epoch이 하나씩 지날 수록 이 어려운 Negative Example은 1개씩 더 추가된다.

3.4. Node Embeddings via MapReduce

학습이 끝난 후 Embedding을 생성하는 것도 굉장한 연산량을 요하는 작업이다. 본 논문에서는 이러한 연산을 효율적으로 수행하는 방식을 소개한다. 이 방식은 반복적 연산 없이 모델의 추론을 가능하게 한다. 아래 그림은 Pinterest의 Pin-to-Board 이분 그래프의 데이터 흐름을 잘 나타내고 있다.

본 논문에서 소개하는 MapReduce 파이프라인은 다음과 같이 2개의 주요 요소를 갖는다.

(1) 하나의 MapReduce는 모든 pin을 Aggregation 연산이 수행되는 저차원 잠재 공간에 투사한다.

(2) 다른 MapReduce는 결과 Representation과 그 Representation이 발생한 Board의 ID를 결합하고, Board Embedding은 Sampling된 이웃의 Feature를 Pooling함으로써 계산된다.

이러한 방식을 도입하면 각 Node의 잠재 벡터는 단 한 번만에 계산되게 된다.

3.5. Efficient Nearest-neighbor Lookups

PinSAGE의 결과물로 형성된 Embedding은 많은 곳에 적용될 수 있지만 가장 직접적인 활용은 바로 이러한 Embedding의 근접 이웃 벡터를 찾아 추천에 활용하는 방법이 될 것이다.

Locality Sensitive Hashing을 통해 근사적인 KNN이 효율적으로 수행될 수 있다. Hash 함수가 계산되고 난 후 Item을 얻는 것은 Weak AND 연산자에 기반한 2단계 retrieval 과정에 의해 실현될 것이다.


4. Experiments

(후략)


References

1) 논문 원본

Comment  Read more