VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.036USD
STEEM
0.000STEEM
SBD
0.000SBD
Effective Power
5.007SP
├── Own SP
0.629SP
└── Incoming DelegationsDeleg
+4.378SP
Detailed Balance
| STEEM | ||
| balance | 0.000STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.629SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.378SP | SP |
| Effective Power | 5.007SP | SP |
| Reward SP (pending) | 0.002SP | SP |
| SBD | ||
| sbd_balance | 0.000SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.000SBD | SBD |
{
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "1022.802403 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7120.857403 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.000 SBD",
"conversions": []
}Account Info
| name | saemi32 |
| id | 711270 |
| rank | 247,288 |
| reputation | 98850010 |
| created | 2018-02-05T00:49:42 |
| recovery_account | steem |
| proxy | None |
| post_count | 6 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-03-09T09:18:39 |
| last_root_post | 2018-03-09T09:18:39 |
| last_vote_time | 2018-03-09T09:18:39 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.000 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 1022.802403 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7120.857403 VESTS |
| reward_vesting_balance | 4.084277 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 1970-01-01T00:00:00 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM6jtkS9Tq98rTXqPkX6hB2A5CwJHKjkN6dV6T5PZPuPuMCiSp6w",
1
]
],
"weight_threshold": 1
},
"balance": "0.000 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2018-02-05T00:49:42",
"curation_rewards": 2,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779084078
},
"guest_bloggers": [],
"id": 711270,
"json_metadata": "",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "1970-01-01T00:00:00",
"last_owner_update": "1970-01-01T00:00:00",
"last_post": "2018-03-09T09:18:39",
"last_root_post": "2018-03-09T09:18:39",
"last_vote_time": "2018-03-09T09:18:39",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM6Ld1KhyvmPk9tMLUxyT423A7Pc52Kb517yoe72a77rnXPHwQXu",
"mined": false,
"name": "saemi32",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM6uor66jjc7BhWWTMoPQeJ1ptd3iZM1d3AX2VnPK6jg3eMADnEu",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 0,
"post_count": 6,
"post_history": [],
"posting": {
"account_auths": [],
"key_auths": [
[
"STM6QNUHrgzZys1Z1Li4fgjWgnc69on9Jr7W9ZzgyUjaNh578QVyA",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "",
"posting_rewards": 0,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "7120.857403 VESTS",
"recovery_account": "steem",
"reputation": 98850010,
"reset_account": "null",
"reward_sbd_balance": "0.000 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "4.084277 VESTS",
"reward_vesting_steem": "0.002 STEEM",
"savings_balance": "0.000 STEEM",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"sbd_balance": "0.000 SBD",
"sbd_last_interest_payment": "1970-01-01T00:00:00",
"sbd_seconds": "0",
"sbd_seconds_last_update": "1970-01-01T00:00:00",
"tags_usage": [],
"to_withdraw": 0,
"transfer_history": [],
"vesting_balance": "0.000 STEEM",
"vesting_shares": "1022.802403 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779084078
},
"voting_power": 0,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 247288
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 06:01:18
2026/05/18 06:01:18
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 7120.857403 VESTS |
| Transaction Info | Block #106150340/Trx 7d2dd7faa7a3abe234f6cb80ffbe0fef60f71efe |
View Raw JSON Data
{
"block": 106150340,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "7120.857403 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-18T06:01:18",
"trx_id": "7d2dd7faa7a3abe234f6cb80ffbe0fef60f71efe",
"trx_in_block": 2,
"virtual_op": 0
}2026/05/13 03:16:21
2026/05/13 03:16:21
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 4408.646998 VESTS |
| Transaction Info | Block #106003764/Trx a88269550afe50062e1fc57bee5cf36a327911b8 |
View Raw JSON Data
{
"block": 106003764,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "4408.646998 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-13T03:16:21",
"trx_id": "a88269550afe50062e1fc57bee5cf36a327911b8",
"trx_in_block": 3,
"virtual_op": 0
}2026/04/26 05:13:21
2026/04/26 05:13:21
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 7133.373159 VESTS |
| Transaction Info | Block #105517830/Trx 4ebf9845851125d4a8a3b015e5cd86dd44bc51ba |
View Raw JSON Data
{
"block": 105517830,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "7133.373159 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-04-26T05:13:21",
"trx_id": "4ebf9845851125d4a8a3b015e5cd86dd44bc51ba",
"trx_in_block": 3,
"virtual_op": 0
}2026/01/23 23:18:51
2026/01/23 23:18:51
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 4450.193817 VESTS |
| Transaction Info | Block #102870395/Trx ba2991ed7eb77313298623f6e4728e10ea686cb8 |
View Raw JSON Data
{
"block": 102870395,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "4450.193817 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-01-23T23:18:51",
"trx_id": "ba2991ed7eb77313298623f6e4728e10ea686cb8",
"trx_in_block": 1,
"virtual_op": 0
}2024/12/17 18:29:18
2024/12/17 18:29:18
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 4614.413014 VESTS |
| Transaction Info | Block #91316616/Trx e43124229a3e5c215c679fb8a5a05455a21b787e |
View Raw JSON Data
{
"block": 91316616,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "4614.413014 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2024-12-17T18:29:18",
"trx_id": "e43124229a3e5c215c679fb8a5a05455a21b787e",
"trx_in_block": 3,
"virtual_op": 0
}2023/11/14 10:10:36
2023/11/14 10:10:36
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 4783.546546 VESTS |
| Transaction Info | Block #79870770/Trx bda9f905e46277e67e022f2d85d4a80d7200ebef |
View Raw JSON Data
{
"block": 79870770,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "4783.546546 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-11-14T10:10:36",
"trx_id": "bda9f905e46277e67e022f2d85d4a80d7200ebef",
"trx_in_block": 5,
"virtual_op": 0
}2023/09/22 10:04:42
2023/09/22 10:04:42
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 7720.455332 VESTS |
| Transaction Info | Block #78362490/Trx e26047bb5a5d8faed2775d10cb1186c84507379c |
View Raw JSON Data
{
"block": 78362490,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "7720.455332 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-09-22T10:04:42",
"trx_id": "e26047bb5a5d8faed2775d10cb1186c84507379c",
"trx_in_block": 0,
"virtual_op": 0
}2022/11/03 17:34:39
2022/11/03 17:34:39
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 7942.506770 VESTS |
| Transaction Info | Block #69120277/Trx 440286c0d6d16ceaf9d53a48db8aad0fde2807d1 |
View Raw JSON Data
{
"block": 69120277,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "7942.506770 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-11-03T17:34:39",
"trx_id": "440286c0d6d16ceaf9d53a48db8aad0fde2807d1",
"trx_in_block": 3,
"virtual_op": 0
}2022/01/17 22:48:12
2022/01/17 22:48:12
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 8162.614371 VESTS |
| Transaction Info | Block #60823557/Trx ee4d23c21dc347ec475d7681e6afb9dfab357fe5 |
View Raw JSON Data
{
"block": 60823557,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "8162.614371 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-01-17T22:48:12",
"trx_id": "ee4d23c21dc347ec475d7681e6afb9dfab357fe5",
"trx_in_block": 8,
"virtual_op": 0
}2021/06/14 05:59:48
2021/06/14 05:59:48
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 8346.808659 VESTS |
| Transaction Info | Block #54613899/Trx 04e03dfa3aee0a05e514a1f32f140c9ba94302e9 |
View Raw JSON Data
{
"block": 54613899,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "8346.808659 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2021-06-14T05:59:48",
"trx_id": "04e03dfa3aee0a05e514a1f32f140c9ba94302e9",
"trx_in_block": 2,
"virtual_op": 0
}2020/12/11 16:12:30
2020/12/11 16:12:30
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 8534.230633 VESTS |
| Transaction Info | Block #49361172/Trx d3f02d3d6f1dba29b15c076ffcb856a3dba2f8e4 |
View Raw JSON Data
{
"block": 49361172,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "8534.230633 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-11T16:12:30",
"trx_id": "d3f02d3d6f1dba29b15c076ffcb856a3dba2f8e4",
"trx_in_block": 0,
"virtual_op": 0
}2020/12/06 09:48:12
2020/12/06 09:48:12
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49212697/Trx 9c319bf1ac4b59e6203382dc58648407e188b508 |
View Raw JSON Data
{
"block": 49212697,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "1912.543513 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-06T09:48:12",
"trx_id": "9c319bf1ac4b59e6203382dc58648407e188b508",
"trx_in_block": 1,
"virtual_op": 0
}2020/12/05 19:50:12
2020/12/05 19:50:12
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 8540.438487 VESTS |
| Transaction Info | Block #49196253/Trx 3f352d4d5b8e1bc8f6857531340b83ff74294de4 |
View Raw JSON Data
{
"block": 49196253,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "8540.438487 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-05T19:50:12",
"trx_id": "3f352d4d5b8e1bc8f6857531340b83ff74294de4",
"trx_in_block": 4,
"virtual_op": 0
}2020/11/03 02:12:27
2020/11/03 02:12:27
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48270246/Trx c4fe4c1b34ec052a1bc7ed93ee0fe55c8551b282 |
View Raw JSON Data
{
"block": 48270246,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "1920.017158 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-11-03T02:12:27",
"trx_id": "c4fe4c1b34ec052a1bc7ed93ee0fe55c8551b282",
"trx_in_block": 3,
"virtual_op": 0
}2020/05/09 10:51:03
2020/05/09 10:51:03
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 8743.243846 VESTS |
| Transaction Info | Block #43223019/Trx cacc539a1a15dcf1b0bccac41450938c9a31ac1b |
View Raw JSON Data
{
"block": 43223019,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "8743.243846 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-09T10:51:03",
"trx_id": "cacc539a1a15dcf1b0bccac41450938c9a31ac1b",
"trx_in_block": 0,
"virtual_op": 0
}2020/05/08 15:13:15
2020/05/08 15:13:15
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43200024/Trx 7a63f6bd6c53e4c285fed6b2706ff03395f33be8 |
View Raw JSON Data
{
"block": 43200024,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "1953.311140 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-08T15:13:15",
"trx_id": "7a63f6bd6c53e4c285fed6b2706ff03395f33be8",
"trx_in_block": 2,
"virtual_op": 0
}2020/05/06 11:10:54
2020/05/06 11:10:54
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 8744.794329 VESTS |
| Transaction Info | Block #43139059/Trx 7a8d65380a2b6c727a7a7e5ae25e3c74805d0f1e |
View Raw JSON Data
{
"block": 43139059,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "8744.794329 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-06T11:10:54",
"trx_id": "7a8d65380a2b6c727a7a7e5ae25e3c74805d0f1e",
"trx_in_block": 15,
"virtual_op": 0
}2020/02/05 02:23:48
2020/02/05 02:23:48
| author | steemitboard |
| body | Congratulations @saemi32! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@saemi32/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@saemi32) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=saemi32)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator">SteemitBoard Ranking update - A better rich list comparator</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | saemi32 |
| parent permlink | 1 |
| permlink | steemitboard-notify-saemi32-20200205t022348000z |
| title | |
| Transaction Info | Block #40541205/Trx 5586f11cdef7ecd81ae6a3383e93000d6504f6d7 |
View Raw JSON Data
{
"block": 40541205,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @saemi32! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@saemi32/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@saemi32) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=saemi32)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator\"><img src=\"https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png\"></a></td><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator\">SteemitBoard Ranking update - A better rich list comparator</a></td></tr></table>\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "saemi32",
"parent_permlink": "1",
"permlink": "steemitboard-notify-saemi32-20200205t022348000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2020-02-05T02:23:48",
"trx_id": "5586f11cdef7ecd81ae6a3383e93000d6504f6d7",
"trx_in_block": 7,
"virtual_op": 0
}2019/06/24 12:33:57
2019/06/24 12:33:57
| author | saemi32 |
| permlink | 6yvn3l |
| voter | dangdang |
| weight | 10000 (100.00%) |
| Transaction Info | Block #34079640/Trx 67ce604dc83b1b50d560bf999c8d716878ef383e |
View Raw JSON Data
{
"block": 34079640,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "6yvn3l",
"voter": "dangdang",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-06-24T12:33:57",
"trx_id": "67ce604dc83b1b50d560bf999c8d716878ef383e",
"trx_in_block": 7,
"virtual_op": 0
}2019/06/01 14:55:24
2019/06/01 14:55:24
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 8940.168459 VESTS |
| Transaction Info | Block #33421068/Trx 9326e95585fad4b69d32d2219031938900cd64a5 |
View Raw JSON Data
{
"block": 33421068,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "8940.168459 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-01T14:55:24",
"trx_id": "9326e95585fad4b69d32d2219031938900cd64a5",
"trx_in_block": 23,
"virtual_op": 0
}2019/02/05 01:36:36
2019/02/05 01:36:36
| author | steemitboard |
| body | Congratulations @saemi32! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@saemi32/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@saemi32)_</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | saemi32 |
| parent permlink | 1 |
| permlink | steemitboard-notify-saemi32-20190205t013635000z |
| title | |
| Transaction Info | Block #30068115/Trx f806fe356784b0bf2633fa50b2d0b7f0e83e089f |
View Raw JSON Data
{
"block": 30068115,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @saemi32! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@saemi32/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@saemi32)_</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "saemi32",
"parent_permlink": "1",
"permlink": "steemitboard-notify-saemi32-20190205t013635000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-02-05T01:36:36",
"trx_id": "f806fe356784b0bf2633fa50b2d0b7f0e83e089f",
"trx_in_block": 3,
"virtual_op": 0
}2018/06/08 10:01:51
2018/06/08 10:01:51
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 9139.431244 VESTS |
| Transaction Info | Block #23139407/Trx e5089c2ce4b8bdd64663e08f18e744a451117a98 |
View Raw JSON Data
{
"block": 23139407,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "9139.431244 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-06-08T10:01:51",
"trx_id": "e5089c2ce4b8bdd64663e08f18e744a451117a98",
"trx_in_block": 8,
"virtual_op": 0
}2018/05/19 08:08:57
2018/05/19 08:08:57
| delegatee | saemi32 |
| delegator | steem |
| vesting shares | 29496.392306 VESTS |
| Transaction Info | Block #22561668/Trx fe08d9c870fc70b0dcc0cb8431df18754021e15c |
View Raw JSON Data
{
"block": 22561668,
"op": [
"delegate_vesting_shares",
{
"delegatee": "saemi32",
"delegator": "steem",
"vesting_shares": "29496.392306 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-05-19T08:08:57",
"trx_id": "fe08d9c870fc70b0dcc0cb8431df18754021e15c",
"trx_in_block": 6,
"virtual_op": 0
}2018/03/09 11:55:42
2018/03/09 11:55:42
| comment author | armdown |
| comment permlink | by-3 |
| curator | saemi32 |
| reward | 4.084277 VESTS |
| Transaction Info | Block #20523530/Virtual Operation #6 |
View Raw JSON Data
{
"block": 20523530,
"op": [
"curation_reward",
{
"comment_author": "armdown",
"comment_permlink": "by-3",
"curator": "saemi32",
"reward": "4.084277 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-09T11:55:42",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 6
}cryptohyperupvoted (100.00%) @saemi32 / 12018/03/09 09:19:21
cryptohyperupvoted (100.00%) @saemi32 / 1
2018/03/09 09:19:21
| author | saemi32 |
| permlink | 1 |
| voter | cryptohyper |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20520404/Trx d0785dbce16733bb1a52a4a8e33d73d25f2fc2de |
View Raw JSON Data
{
"block": 20520404,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "1",
"voter": "cryptohyper",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-09T09:19:21",
"trx_id": "d0785dbce16733bb1a52a4a8e33d73d25f2fc2de",
"trx_in_block": 14,
"virtual_op": 0
}2018/03/09 09:18:39
2018/03/09 09:18:39
| author | saemi32 |
| permlink | 1 |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20520390/Trx e8fecee16d75dce6a74041499e6368b0a0913e4d |
View Raw JSON Data
{
"block": 20520390,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "1",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-09T09:18:39",
"trx_id": "e8fecee16d75dce6a74041499e6368b0a0913e4d",
"trx_in_block": 18,
"virtual_op": 0
}2018/03/09 09:18:39
2018/03/09 09:18:39
| author | saemi32 |
| body | 콘텐트 기반 추천 시스템이 2000년대 초반 사용됐던 기술이라면 협업 필터링은 지금까지도 가장 널리쓰이는 추천 기술입니다. 아이템 유사성을 기반으로 추출한 특성을 사용하는 대신, 서로 다른 사용자들이 서로 다른 2개의 아이템을 평가한 유사성을 기준으로 추천합니다. 이에 따라 선호도 행렬을 이용하는 방법도 다릅니다. 콘텐트 기반 추천 시스템에서는 아이템 프로파일을 구성할 때 선호도 행렬의 한 열, 즉 하나의 아이템을 프로파일의 구성요소로 사용하지만, 협업 필터링에서는 선호도 행렬의 행, 즉 한 명의 사용자의 정보를 토대로 가장 비슷한 다른 사용자를 찾아 내고, 그 사용자가 좋아한 아이템을 추천합니다. 우선 사용자 유사성을 측정하기 위한 방법을 살펴보겠습니다. 선호도 행렬은 다음과 같이 주어져 있다고 가정합니다.  ### 선호도 행렬 처리하기 #### 데이터 라운딩(rounding) 평점이 주어진 선호도 행렬에서 3, 4, 5점은 상당히 유의미하게 좋아했던 아이템으로, 1, 2점은 보았더라도 좋아하지 않았던 아이템으로 평가할 수 있습니다. 그럴 경우 3, 4, 5점은 1으로, 1, 2점은 0으로 처리해 라운딩합니다.  #### 데이터 정규화(normalizing) 앞서 시도한 정규화와 동일한 방법입니다. 사용자별 평균 평점을 구한 뒤, 각 점수에서 빼주는 방법입니다. 예를 들어 A 사용자는 3개의 아이템에 대해 총 10점을 주었으므로 평균은 10/3 입니다. 이에 따라 HP1, TW, SW1의 점수는 각각 2/3, 5/3, -7/3이 됩니다. 음수가 등장하게 되는 것입니다. 같은 방법으로 사용자 모두에 대한 정규화를 해본 결과는 아래와 같습니다.  ### 사용자 유사성 측정하기 위의 방법을 다양하게 이용하여 선호도 행렬을 분석하기 좋은 형태로 바꾼 뒤에는 사용자 유사성을 계산합니다. 앞에서 다룬 것처럼 대표적으로 자카드 거리(Jaccard Distance)와 코사인 거리(Cosine Distance)를 다뤄봅니다. 선호도 행렬은 라운딩과 정규화 이전의 데이터를 활용해 보도록 하겠습니다.  자카드 거리의 계산식은  (자카드 인덱스)  와 같습니다. A사용자와 B사용자의 자카드 인덱스는 n(A∪B) = 5, n(A∩ B)=1 으로 1/5입니다. 따라서 자카드 거리는 4/5가 됩니다. 마찬가지로 A 사용자와 C사용자의 자카드 거리는 1/2입니다. 즉, A 사용자와 C사용자가 더 유사성이 높은 것입니다. 하지만 이런방법에는 한계가 있습니다. 분명 A 사용자와 C 사용자가 더 유사하다고 결과가 나오긴 했지만, TW, SW1의 점수를 보면 두 사용자의 평점의 패턴이 다르다는 것을 알 수 있습니다. 오히려 A 사용자와 B 사용자가 HP1에 대해 높은 점수를 공통적으로 준 것을 알 수 있습니다. 이에 따라 코사인 거리를 계산해 봅니다. 앞서 다뤘듯, 식은 아래와 같습니다. (코사인각, 코사인 유사도) 코사인 거리 = 1- 코사인 유사도 물론 두 벡터의 내적값이 구해져야 하므로, 평점이 존재하지 않는 항목엔 0을 채워줍니다(안 본것을 저평점으로 계산하는 것에는 문제가 있을 수 있습니다). A사용자와 B사용자의 코사인 유사도와 A사용자와 C사용자의 코사인 유사도는 각각  ,  이와 같고, 따라서 코사인 거리는 A 사용자와 B사용자 사이가 더 짧아서 유사성은 더 높다고 볼 수 있겠습니다. 한편, 정규화를 통해 음수가 등장한 선호도 행렬에서는 코사인각의 방향성까지 고려할 수 있습니다. 두 사용자의 벡터가 반대방향을 가리키고 있는 경우 유사성이 떨어질 것이라 직관적으로 알 수 있습니다. 유사도 평가에 대해서 교재에서는 자카드와 코사인을 이용한 방법만 주로 다루었지만, 최근까지 보고된 논문에 따르면 엄청나게 많은 유사성 계산법이 있습니다. 저도 구현할 때 몇 개 더 만들어볼 생각인데, 구글링 했을 때 인용이 1000이상 나오는 Comprehensive Survey on Distance/Similarity Measures between Probability Density Functions라는 논문 [링크](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.154.8446&rep=rep1&type=pdf) 남깁니다. #### Reference [Recommendation Systems - Stanford InfoLab](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf) |
| json metadata | {"tags":["recommender","machine-learning","collaborative-filtering","data-science"],"image":["https://steemitimages.com/DQmeLQ4iMzrTavUqgoVpWUdk16tgukW73H8qSeM3rz6P534/image.png","https://steemitimages.com/DQmeazwR5xFfoooQckYZuZDzHNh9SKhSPq456qMVUjuNEQH/image.png","https://steemitimages.com/DQmaVh8xHzeATk38QYFTifuhymuTNAC163KEU5XpxSRMEAq/image.png","https://steemitimages.com/DQmV3jWquY1Y1UatBZnWRmAkfZybYFafKCwGV7KsUgoPgPG/image.png","https://steemitimages.com/DQmSNnLC4CC77VXRwRvZ6thT2sr9VbHHMEBKbwdidaU2bXr/image.png","https://steemitimages.com/DQmYGgKt7LNm3Gc3WENLV7uotG3NFkeGps6XxbQtgRh54kQ/image.png","https://steemitimages.com/DQmSpPhdyTEFFbVHjCnAZVdtj6JnXTEycBPCs4A79MRxPmz/image.png","https://steemitimages.com/DQmeBNwSbrjsk2i9w6XRsoyXqKLfeusoXKfanPtenZiLQps/image.png"],"links":["http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.154.8446&rep=rep1&type=pdf","http://infolab.stanford.edu/~ullman/mmds/ch9.pdf"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 1 |
| title | 협업 필터링 (1) |
| Transaction Info | Block #20520390/Trx e8fecee16d75dce6a74041499e6368b0a0913e4d |
View Raw JSON Data
{
"block": 20520390,
"op": [
"comment",
{
"author": "saemi32",
"body": "콘텐트 기반 추천 시스템이 2000년대 초반 사용됐던 기술이라면 협업 필터링은 지금까지도 가장 널리쓰이는 추천 기술입니다. 아이템 유사성을 기반으로 추출한 특성을 사용하는 대신, 서로 다른 사용자들이 서로 다른 2개의 아이템을 평가한 유사성을 기준으로 추천합니다.\n\n이에 따라 선호도 행렬을 이용하는 방법도 다릅니다. 콘텐트 기반 추천 시스템에서는 아이템 프로파일을 구성할 때 선호도 행렬의 한 열, 즉 하나의 아이템을 프로파일의 구성요소로 사용하지만, 협업 필터링에서는 선호도 행렬의 행, 즉 한 명의 사용자의 정보를 토대로 가장 비슷한 다른 사용자를 찾아 내고, 그 사용자가 좋아한 아이템을 추천합니다.\n\n우선 사용자 유사성을 측정하기 위한 방법을 살펴보겠습니다. 선호도 행렬은 다음과 같이 주어져 있다고 가정합니다.\n\n\n\n\n\n### 선호도 행렬 처리하기\n#### 데이터 라운딩(rounding)\n평점이 주어진 선호도 행렬에서 3, 4, 5점은 상당히 유의미하게 좋아했던 아이템으로, 1, 2점은 보았더라도 좋아하지 않았던 아이템으로 평가할 수 있습니다. 그럴 경우 3, 4, 5점은 1으로, 1, 2점은 0으로 처리해 라운딩합니다.\n\n\n\n\n\n#### 데이터 정규화(normalizing)\n앞서 시도한 정규화와 동일한 방법입니다. 사용자별 평균 평점을 구한 뒤, 각 점수에서 빼주는 방법입니다. 예를 들어 A 사용자는 3개의 아이템에 대해 총 10점을 주었으므로 평균은 10/3 입니다. 이에 따라 HP1, TW, SW1의 점수는 각각 2/3, 5/3, -7/3이 됩니다. 음수가 등장하게 되는 것입니다. 같은 방법으로 사용자 모두에 대한 정규화를 해본 결과는 아래와 같습니다.\n\n\n\n\n\n### 사용자 유사성 측정하기\n위의 방법을 다양하게 이용하여 선호도 행렬을 분석하기 좋은 형태로 바꾼 뒤에는 사용자 유사성을 계산합니다. 앞에서 다룬 것처럼 대표적으로 자카드 거리(Jaccard Distance)와 코사인 거리(Cosine Distance)를 다뤄봅니다. 선호도 행렬은 라운딩과 정규화 이전의 데이터를 활용해 보도록 하겠습니다.\n\n\n\n자카드 거리의 계산식은\n\n (자카드 인덱스)\n\n\n\n\n\n와 같습니다. A사용자와 B사용자의 자카드 인덱스는 n(A∪B) = 5, n(A∩ B)=1 으로 1/5입니다. 따라서 자카드 거리는 4/5가 됩니다. 마찬가지로 A 사용자와 C사용자의 자카드 거리는 1/2입니다. 즉, A 사용자와 C사용자가 더 유사성이 높은 것입니다.\n\n하지만 이런방법에는 한계가 있습니다. 분명 A 사용자와 C 사용자가 더 유사하다고 결과가 나오긴 했지만, TW, SW1의 점수를 보면 두 사용자의 평점의 패턴이 다르다는 것을 알 수 있습니다. 오히려 A 사용자와 B 사용자가 HP1에 대해 높은 점수를 공통적으로 준 것을 알 수 있습니다.\n\n이에 따라 코사인 거리를 계산해 봅니다. 앞서 다뤘듯, 식은 아래와 같습니다.\n\n\n(코사인각, 코사인 유사도)\n\n코사인 거리 = 1- 코사인 유사도\n\n\n\n물론 두 벡터의 내적값이 구해져야 하므로, 평점이 존재하지 않는 항목엔 0을 채워줍니다(안 본것을 저평점으로 계산하는 것에는 문제가 있을 수 있습니다).\n\nA사용자와 B사용자의 코사인 유사도와 A사용자와 C사용자의 코사인 유사도는 각각\n\n , \n\n이와 같고, 따라서 코사인 거리는 A 사용자와 B사용자 사이가 더 짧아서 유사성은 더 높다고 볼 수 있겠습니다. 한편, 정규화를 통해 음수가 등장한 선호도 행렬에서는 코사인각의 방향성까지 고려할 수 있습니다. 두 사용자의 벡터가 반대방향을 가리키고 있는 경우 유사성이 떨어질 것이라 직관적으로 알 수 있습니다.\n\n유사도 평가에 대해서 교재에서는 자카드와 코사인을 이용한 방법만 주로 다루었지만, 최근까지 보고된 논문에 따르면 엄청나게 많은 유사성 계산법이 있습니다. 저도 구현할 때 몇 개 더 만들어볼 생각인데, 구글링 했을 때 인용이 1000이상 나오는 Comprehensive Survey on Distance/Similarity Measures between Probability Density Functions라는 논문 [링크](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.154.8446&rep=rep1&type=pdf) 남깁니다.\n\n\n\n#### Reference\n\n[Recommendation Systems - Stanford InfoLab](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf)",
"json_metadata": "{\"tags\":[\"recommender\",\"machine-learning\",\"collaborative-filtering\",\"data-science\"],\"image\":[\"https://steemitimages.com/DQmeLQ4iMzrTavUqgoVpWUdk16tgukW73H8qSeM3rz6P534/image.png\",\"https://steemitimages.com/DQmeazwR5xFfoooQckYZuZDzHNh9SKhSPq456qMVUjuNEQH/image.png\",\"https://steemitimages.com/DQmaVh8xHzeATk38QYFTifuhymuTNAC163KEU5XpxSRMEAq/image.png\",\"https://steemitimages.com/DQmV3jWquY1Y1UatBZnWRmAkfZybYFafKCwGV7KsUgoPgPG/image.png\",\"https://steemitimages.com/DQmSNnLC4CC77VXRwRvZ6thT2sr9VbHHMEBKbwdidaU2bXr/image.png\",\"https://steemitimages.com/DQmYGgKt7LNm3Gc3WENLV7uotG3NFkeGps6XxbQtgRh54kQ/image.png\",\"https://steemitimages.com/DQmSpPhdyTEFFbVHjCnAZVdtj6JnXTEycBPCs4A79MRxPmz/image.png\",\"https://steemitimages.com/DQmeBNwSbrjsk2i9w6XRsoyXqKLfeusoXKfanPtenZiLQps/image.png\"],\"links\":[\"http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.154.8446&rep=rep1&type=pdf\",\"http://infolab.stanford.edu/~ullman/mmds/ch9.pdf\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "1",
"title": "협업 필터링 (1)"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-09T09:18:39",
"trx_id": "e8fecee16d75dce6a74041499e6368b0a0913e4d",
"trx_in_block": 18,
"virtual_op": 0
}2018/03/09 09:09:45
2018/03/09 09:09:45
| author | saemi32 |
| permlink | 2 |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20520213/Trx 74c741d76f4dfe42f1e9624ddf71c431cd4d8101 |
View Raw JSON Data
{
"block": 20520213,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "2",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-09T09:09:45",
"trx_id": "74c741d76f4dfe42f1e9624ddf71c431cd4d8101",
"trx_in_block": 26,
"virtual_op": 0
}2018/03/09 09:09:45
2018/03/09 09:09:45
| author | saemi32 |
| body | ### 사용자 프로파일 추천을 위해서 아이템 프로파일만 필요한 것은 아닙니다. 사용자의 선호를 반영해야 합니다. 일단 앞에서 다루었던 사용자 선호도 행렬을 생각해봅니다. 각 행은 한 사용자, 각 열은 한 아이템을 나타내고, 각 행과 열에 만나는 부분에는 평점이 들어가거나 클릭 또는 좋아요 정보를 나타내는 1이 들어갑니다. 후자의 경우 대부분은 비어있는 희소 행렬입니다. 아이템 프로파일과 사용자 프로파일을 적절히 병합해서 사용해야 할 것입니다. 앞서 다룬 영화 정보를 다시 살펴보도록 합니다. 영화-배우로 이루어지고 등장하면 1, 아니면 0인 아이템 프로파일과 1과 blank가 주어져 있는 선호도 행렬이 주어졌을 경우 가중치를 씁니다. 만약 사용자가 본 영화 전체에서 줄리아 로버츠가 등장한 영화가 20%라고 선호도 행렬에서 파악할 수 있다면, 해당 사용자 프로파일 중 사용자-줄리아 로버츠 항목에 1대신 0.2를 쓰면 됩니다. 가중치를 주는 것입니다. 1~5점의 평점이 주어진 선호도 행렬이 있다면, 정규화를 해야합니다. 선호도 행렬에서 특정 사용자가 준 영화 평점 평균을 구한 뒤, 줄리아 로버츠가 등장하는 영화들에 대한 평점에서 뺍니다. 만약 특정 사용자의 전체 평점의 평균이 3점이고, 줄리아 로버츠가 등장한 영화 A, B, C에 대해 점수를 각각 2, 3, 5점을 주었다고 할 때, 각 점수는 2-4=-2, 3-4=-1, 5-4=1가 되고, 이는 사용자 프로파일에서 사용자-줄리아 로버츠 항목에 이 점수들의 평균인 -2/3을 쓰면 됩니다. ### 요약 아이템 프로파일의 준비: 아이템별 특성-값 쌍으로 이루어진 벡터로 공급자가 작성한 메타 정보를 이용하거나(ex. 출연배우) 분석하여 특성-값을 발견한다(TF-IDF 계산 등). 필요하다면 스케일링 팩터 등을 활용해 각 특성별 영향력을 조절한다. 사용자 프로파일의 준비: 사용자별 특성-값 쌍으로 이루어진 벡터로 선호도 행렬이 있을 때 1과 blank로 주어진 클릭 또는 좋아요 데이터가 있을 때는 전체 좋아요 중 특정 특성의 비중을 계산한다. 평점으로 주어진 데이터가 있을 때에는 평균을 구한 뒤 특정 특성의 값들을 정규화한 뒤 평균을 내 사용자 프로파일의 값으로 활용한다. ### 콘텐츠 추천하기 앞에서 한 것처럼, 아이템 프로파일과 사용자 프로파일의 내적을 활용해 코사인 값을 구해봅니다. 코사인 거리가 짧을수록 더 높은 추천도를 가질 수 있겠지요. 하지만 여러가지 상황이 있을 수 있습니다. 이와 같이 배우 정보만 있는 경우라면 아주 많은 배우가 등장하는 경우 추천되기 쉬운 건 어쩔 수 없을 것입니다. 정규화 등의 영향으로 좋아하지 않는 배우에 대한 -값이 물론 나올 수 있습니다. 만약 수 많은 배우가 나오는 영화 중 사용자가 좋아하는 배우와 좋아하지 않는 배우가 섞여 있을 때에는 코사인 값이 0에 가깝고 아마 두 벡터의 각은 90도를 이룰 것입니다. 아마 출연 배우 대부분을 사용자가 좋아하지 않는다면, 코사인 값은 아주 큰 -값이 나올 것이고, 두 벡터의 각은 180도에 가까울 것이라 예측할 수 있습니다. ### 머신러닝을 이용한 콘텐츠 추천 머신러닝을 이용해 사용자별 분류(classification) 문제로 추천 시스템에 접근할 수도 있습니다. 여러가지 알고리즘이 있을 수 있습니다. 하지만 사용자마다 트레이닝과 테스트를 반복해야하니 큰 문제에는 적합하지 않다는 의견도 있습니다. |
| json metadata | {"tags":["recommender","content-based","machine-learning"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 2 |
| title | 콘텐트 기반 추천 시스템 (2) |
| Transaction Info | Block #20520213/Trx 74c741d76f4dfe42f1e9624ddf71c431cd4d8101 |
View Raw JSON Data
{
"block": 20520213,
"op": [
"comment",
{
"author": "saemi32",
"body": "### 사용자 프로파일\n추천을 위해서 아이템 프로파일만 필요한 것은 아닙니다. 사용자의 선호를 반영해야 합니다. 일단 앞에서 다루었던 사용자 선호도 행렬을 생각해봅니다. 각 행은 한 사용자, 각 열은 한 아이템을 나타내고, 각 행과 열에 만나는 부분에는 평점이 들어가거나 클릭 또는 좋아요 정보를 나타내는 1이 들어갑니다. 후자의 경우 대부분은 비어있는 희소 행렬입니다. 아이템 프로파일과 사용자 프로파일을 적절히 병합해서 사용해야 할 것입니다.\n\n앞서 다룬 영화 정보를 다시 살펴보도록 합니다. 영화-배우로 이루어지고 등장하면 1, 아니면 0인 아이템 프로파일과 1과 blank가 주어져 있는 선호도 행렬이 주어졌을 경우 가중치를 씁니다. 만약 사용자가 본 영화 전체에서 줄리아 로버츠가 등장한 영화가 20%라고 선호도 행렬에서 파악할 수 있다면, 해당 사용자 프로파일 중 사용자-줄리아 로버츠 항목에 1대신 0.2를 쓰면 됩니다. 가중치를 주는 것입니다.\n\n1~5점의 평점이 주어진 선호도 행렬이 있다면, 정규화를 해야합니다. 선호도 행렬에서 특정 사용자가 준 영화 평점 평균을 구한 뒤, 줄리아 로버츠가 등장하는 영화들에 대한 평점에서 뺍니다. 만약 특정 사용자의 전체 평점의 평균이 3점이고, 줄리아 로버츠가 등장한 영화 A, B, C에 대해 점수를 각각 2, 3, 5점을 주었다고 할 때, 각 점수는 2-4=-2, 3-4=-1, 5-4=1가 되고, 이는 사용자 프로파일에서 사용자-줄리아 로버츠 항목에 이 점수들의 평균인 -2/3을 쓰면 됩니다.\n\n\n\n### 요약\n아이템 프로파일의 준비: 아이템별 특성-값 쌍으로 이루어진 벡터로 공급자가 작성한 메타 정보를 이용하거나(ex. 출연배우) 분석하여 특성-값을 발견한다(TF-IDF 계산 등). 필요하다면 스케일링 팩터 등을 활용해 각 특성별 영향력을 조절한다.\n\n사용자 프로파일의 준비: 사용자별 특성-값 쌍으로 이루어진 벡터로 선호도 행렬이 있을 때 1과 blank로 주어진 클릭 또는 좋아요 데이터가 있을 때는 전체 좋아요 중 특정 특성의 비중을 계산한다. 평점으로 주어진 데이터가 있을 때에는 평균을 구한 뒤 특정 특성의 값들을 정규화한 뒤 평균을 내 사용자 프로파일의 값으로 활용한다.\n\n\n\n### 콘텐츠 추천하기\n앞에서 한 것처럼, 아이템 프로파일과 사용자 프로파일의 내적을 활용해 코사인 값을 구해봅니다. 코사인 거리가 짧을수록 더 높은 추천도를 가질 수 있겠지요. 하지만 여러가지 상황이 있을 수 있습니다. 이와 같이 배우 정보만 있는 경우라면 아주 많은 배우가 등장하는 경우 추천되기 쉬운 건 어쩔 수 없을 것입니다.\n\n정규화 등의 영향으로 좋아하지 않는 배우에 대한 -값이 물론 나올 수 있습니다. 만약 수 많은 배우가 나오는 영화 중 사용자가 좋아하는 배우와 좋아하지 않는 배우가 섞여 있을 때에는 코사인 값이 0에 가깝고 아마 두 벡터의 각은 90도를 이룰 것입니다. 아마 출연 배우 대부분을 사용자가 좋아하지 않는다면, 코사인 값은 아주 큰 -값이 나올 것이고, 두 벡터의 각은 180도에 가까울 것이라 예측할 수 있습니다.\n\n\n\n### 머신러닝을 이용한 콘텐츠 추천\n머신러닝을 이용해 사용자별 분류(classification) 문제로 추천 시스템에 접근할 수도 있습니다. 여러가지 알고리즘이 있을 수 있습니다. 하지만 사용자마다 트레이닝과 테스트를 반복해야하니 큰 문제에는 적합하지 않다는 의견도 있습니다.",
"json_metadata": "{\"tags\":[\"recommender\",\"content-based\",\"machine-learning\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "2",
"title": "콘텐트 기반 추천 시스템 (2)"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-09T09:09:45",
"trx_id": "74c741d76f4dfe42f1e9624ddf71c431cd4d8101",
"trx_in_block": 26,
"virtual_op": 0
}2018/03/05 10:49:30
2018/03/05 10:49:30
| author | bbworld |
| permlink | gazoe |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20407163/Trx 24ce6d5a60b178e63e95d8c67ccb851aaa7e6eb7 |
View Raw JSON Data
{
"block": 20407163,
"op": [
"vote",
{
"author": "bbworld",
"permlink": "gazoe",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-05T10:49:30",
"trx_id": "24ce6d5a60b178e63e95d8c67ccb851aaa7e6eb7",
"trx_in_block": 15,
"virtual_op": 0
}2018/03/03 19:45:30
2018/03/03 19:45:30
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"teddybae","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20360296/Trx 9468d47b4e59fdc5891ed321d0709092e74fa1dd |
View Raw JSON Data
{
"block": 20360296,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"teddybae\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-03-03T19:45:30",
"trx_id": "9468d47b4e59fdc5891ed321d0709092e74fa1dd",
"trx_in_block": 19,
"virtual_op": 0
}2018/03/02 12:46:48
2018/03/02 12:46:48
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"armdown","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20323130/Trx 7001204ddc0396a322e8ab124361c1bf13180b33 |
View Raw JSON Data
{
"block": 20323130,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"armdown\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T12:46:48",
"trx_id": "7001204ddc0396a322e8ab124361c1bf13180b33",
"trx_in_block": 30,
"virtual_op": 0
}2018/03/02 12:46:27
2018/03/02 12:46:27
| author | armdown |
| permlink | by-3 |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20323123/Trx 790e367b711547da5814b46493a45fbc2f6b6597 |
View Raw JSON Data
{
"block": 20323123,
"op": [
"vote",
{
"author": "armdown",
"permlink": "by-3",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T12:46:27",
"trx_id": "790e367b711547da5814b46493a45fbc2f6b6597",
"trx_in_block": 45,
"virtual_op": 0
}saemi32followed @hyunwungjae2018/03/02 07:24:27
saemi32followed @hyunwungjae
2018/03/02 07:24:27
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"hyunwungjae","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20316687/Trx 0d61349a0b8ba37ba523ee95bf206bf68133e590 |
View Raw JSON Data
{
"block": 20316687,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"hyunwungjae\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T07:24:27",
"trx_id": "0d61349a0b8ba37ba523ee95bf206bf68133e590",
"trx_in_block": 14,
"virtual_op": 0
}2018/03/02 07:23:54
2018/03/02 07:23:54
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"plan2f","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20316676/Trx 0bbf1922674dbbed137319f141070a1f69b89099 |
View Raw JSON Data
{
"block": 20316676,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"plan2f\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T07:23:54",
"trx_id": "0bbf1922674dbbed137319f141070a1f69b89099",
"trx_in_block": 9,
"virtual_op": 0
}2018/03/02 06:32:45
2018/03/02 06:32:45
| author | saemi32 |
| permlink | 6yvn3l |
| voter | plan2f |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20315653/Trx 8a3b112c9d835af7c931eb72c05d1c67b4c15371 |
View Raw JSON Data
{
"block": 20315653,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "6yvn3l",
"voter": "plan2f",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T06:32:45",
"trx_id": "8a3b112c9d835af7c931eb72c05d1c67b4c15371",
"trx_in_block": 27,
"virtual_op": 0
}plan2freplied to @saemi32 / re-saemi32-6yvn3l-20180302t063233408z2018/03/02 06:32:42
plan2freplied to @saemi32 / re-saemi32-6yvn3l-20180302t063233408z
2018/03/02 06:32:42
| author | plan2f |
| body | 어렵네요... ㄷㄷ |
| json metadata | {"tags":["recommender"],"app":"steemit/0.1"} |
| parent author | saemi32 |
| parent permlink | 6yvn3l |
| permlink | re-saemi32-6yvn3l-20180302t063233408z |
| title | |
| Transaction Info | Block #20315652/Trx c7946b8030c8a1df8b6533108f91992aea9eec77 |
View Raw JSON Data
{
"block": 20315652,
"op": [
"comment",
{
"author": "plan2f",
"body": "어렵네요... ㄷㄷ",
"json_metadata": "{\"tags\":[\"recommender\"],\"app\":\"steemit/0.1\"}",
"parent_author": "saemi32",
"parent_permlink": "6yvn3l",
"permlink": "re-saemi32-6yvn3l-20180302t063233408z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T06:32:42",
"trx_id": "c7946b8030c8a1df8b6533108f91992aea9eec77",
"trx_in_block": 17,
"virtual_op": 0
}hyunwungjaereplied to @saemi32 / re-saemi32-4zjajb-20180302t062532853z2018/03/02 06:25:33
hyunwungjaereplied to @saemi32 / re-saemi32-4zjajb-20180302t062532853z
2018/03/02 06:25:33
| author | hyunwungjae |
| body | 콘텐츠가 굉장히 전문가 뿜뿜입니다. 앞으로 기대 많이 하겠습니다. 웰컴투스티밋 !! |
| json metadata | {"tags":["recommender"],"app":"steemit/0.1"} |
| parent author | saemi32 |
| parent permlink | 4zjajb |
| permlink | re-saemi32-4zjajb-20180302t062532853z |
| title | |
| Transaction Info | Block #20315509/Trx 65dbcc6a9dc0b157dcaaa6caa91dc3f6c8686838 |
View Raw JSON Data
{
"block": 20315509,
"op": [
"comment",
{
"author": "hyunwungjae",
"body": "콘텐츠가 굉장히 전문가 뿜뿜입니다. 앞으로 기대 많이 하겠습니다. 웰컴투스티밋 !!",
"json_metadata": "{\"tags\":[\"recommender\"],\"app\":\"steemit/0.1\"}",
"parent_author": "saemi32",
"parent_permlink": "4zjajb",
"permlink": "re-saemi32-4zjajb-20180302t062532853z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T06:25:33",
"trx_id": "65dbcc6a9dc0b157dcaaa6caa91dc3f6c8686838",
"trx_in_block": 27,
"virtual_op": 0
}hyunwungjaeupvoted (100.00%) @saemi32 / 4zjajb2018/03/02 06:25:00
hyunwungjaeupvoted (100.00%) @saemi32 / 4zjajb
2018/03/02 06:25:00
| author | saemi32 |
| permlink | 4zjajb |
| voter | hyunwungjae |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20315498/Trx 45b850cb3a0c8041ba2c8cf9946ea225d46441b6 |
View Raw JSON Data
{
"block": 20315498,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "4zjajb",
"voter": "hyunwungjae",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-02T06:25:00",
"trx_id": "45b850cb3a0c8041ba2c8cf9946ea225d46441b6",
"trx_in_block": 28,
"virtual_op": 0
}ralphallenupvoted (100.00%) @saemi32 / 6yvn3l2018/02/28 07:01:24
ralphallenupvoted (100.00%) @saemi32 / 6yvn3l
2018/02/28 07:01:24
| author | saemi32 |
| permlink | 6yvn3l |
| voter | ralphallen |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20258666/Trx 94cc143a91b07be89718c27a648761532622bc1b |
View Raw JSON Data
{
"block": 20258666,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "6yvn3l",
"voter": "ralphallen",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-28T07:01:24",
"trx_id": "94cc143a91b07be89718c27a648761532622bc1b",
"trx_in_block": 35,
"virtual_op": 0
}2018/02/28 07:00:21
2018/02/28 07:00:21
| author | saemi32 |
| body | 추천 시스템에는 콘텐트 기반 추천 시스템과 협업필터링 시스템이 있습니다. 이번 장에서는 콘텐트 기반 추천 시스템을 다뤄보도록 하겠습니다. 잠시 되새겨 보면, 콘텐트 기반 추천 시스템은 아이템별 속성을 토대로 유사성을 측정하는 방법이고, 협업 필터링은 사용자와 아이템 사이의 관계를 선호도 행렬로 접근하는 방식입니다. ## 아이템 프로파일 콘텐트 기반 추천 시스템에서는 각 아이템마다 프로파일을 작성해야합니다. 프로파일은 아이템에 관련된 중요한 특성을 가리킵니다. 예를들어 영화의 경우, 출연 배우, 감독, 제작연도, 장르와 같은 속성이 있습니다(단, 장르는 주관적인 영역이라 사람이 정하여 입력하기보다 후에 기계적으로 할당하기도 합니다). 물론 이외에도 여러가지 다른 속성이 있을 수 있지요. 문서에서 특성(키워드) 추출하기 물론 공급자나 제작자로부터 여러가지 특성 정보를 명시적으로 입력받을 수도 있습니다. 하지만 어떤 텍스트를 통해서 명백히 드러나지 않는 특성을 뽑아내야하는 경우도 있습니다. 흔히 ‘비슷한 문서’란 연달아 비슷한 단어가 배열되는 것을 의미하지만 추천 시스템에서는 다릅니다. ‘핵심’ 단어가 얼마나 ‘많이’ 함께 등장하는 지가 중요합니다. 가장 흔한 방법으로는 텍스트 마이닝 방법 중 TF-IDF를 활용하는 방법입니다. * stop word를 제거합니다. 자연어 문장 내에서 많이 쓰이지만 전혀 키워드로 쓸모없는, 영어의 The, is 등과 같은 단어이고, 한국어에서는 이, 그 등과 같은 단어가 해당될 것입니다. stop word는 구글링을 하면 쉽게 찾을 수 있습니다. 영어 stop word는 여기, 한국어 stop word는 [여기](https://www.ranks.nl/stopwords/korean)에서 찾을 수 있습니다. 파이썬 패키지 중에 stop words를 포함하는 것도 있으니 쉽게 사용할 수 있을 것입니다. 하지만 분야별 특징이 있을 수 있으므로 반드시 stop word를 제거하시고 남은 단어들을 눈으로 확인해 보시길 바랍니다. * 이어서, TF-IDF를 계산합니다. TF-IDF(Term Frequency – Inverse Document Frequency)는 여러 문서의 집합에서 어떤 단어가 어떤 문서에서 얼마나 중요한지를 나타내 주는 식입니다. TF는 한 문서 내에서 어떤 단어가 나타나는 빈도이고, IDF는 어떤 단어가 나타나는 문서 빈도의 역수를 가리킵니다. TF와 IDF값을 곱해 TF-IDF값을 얻어냅니다. 불리언값을 주거나 로그를 이용한 여러가지 수식이 있는데 한글 위키에도 자세한 내용이 있으니 참조합니다. * 그리고, 적절한 threshold값을 주고, 이 이상의 높은 TF-IDF값을 갖는 단어를 뽑아냅니다. 이런 과정을 거치면 문서는 중요한 단어의 집합으로 표현됩니다. #### 문서간 유사성 계산하기 이제 집합 간 유사성을 계산하는 문제로 치환됐습니다. 몇가지 계산법이 있습니다. 자카드 거리(Jaccard distance)를 계산하거나, 코사인 거리(Cosine distance)를 계산하는 방법입니다. 벡터 공간상 거리 계산에 대해서는 여러 가지 다른 방법을 찾을 수도 있을 것입니다. 자카드 거리는 자카드 인덱스 J(A, B)를 구한 뒤, 전체 집합 1에서 빼는 방법입니다.   코사인 거리는 단어의 집합으로 표현된 문서를, 집합이 아니라 벡터로 간주하고 벡터상 거리를 구하는 방법입니다. 코사인 내적을 구하는 식에서 코사인 유사도 similarity를 구한 뒤 마찬가지로 전체 집합 1에서 빼게 됩니다.  문서의 유사성을 구하는 방법으로 어휘기반으로 shingling, min-hashing, LSH 등이 비슷하게 있는 데, 나중에 다뤄보도록 합니다. #### 태그로부터 특성 추출하기(라기보다는 적용하기) 사용자로부터 문서나 이미지의 태그를 직접 입력받는 방법도 아이템의 특성을 정의하는데 유용한 방법입니다. #### 아이템 프로파일(벡터)의 표현 이제부터 콘텐트 기반 추천 시스템의 핵심을 구성하는 아이템 프로파일의 표현법을 알아보겠습니다. 아이템별 특성-값의 쌍으로 구성되는 벡터를 만드는 과정이라고 보시면 됩니다. 공급자나 제작자로부터 얻어서 쉽게 얻는 정보나 문서로부터 높은 TF-IDF값을 같는 키워드들이 등장하는 벡터를 구성할 수 있습니다. 예를 들어 각각 5명의 배우가 출연하는 A와 B영화를 가정해 봅시다. 만약 2명의 배우가 A와 B 모두에 출연했다면 영화배우의 수는 a, b, c, d, e, f, g, h로 8명일 것입니다. 이럴경우  이렇게 아이템 프로파일을 구성할 수 있습니다. b와 f 배우가 두 영화 모두에 등장하는 것을 알 수 있습니다. 한편, 각 영화에 3점, 4점이라는 평점이 있다고 가정할 수도 있습니다. 그런 경우엔  위와 같이 ‘스케일링 팩터’를 이용하면 됩니다. 0과 1이 대부분인 벡터에서 3과 4가 그값 그대로 작용된다면, 코사인값을 계산할 때 평점이 배우에 대한 점수보다 훨씬 중요하게 작용하게 되므로 조절하는 것입니다. 위 벡터 A와 B에 대한 코사인 값을 구해보겠습니다. 위에서 similarity로 제시된 식에 따르면  이렇게 주어지고,위 값은 코사인 값으로 값의 범위는 -1에서 1이며, 알파 값에 따라 아주 다른 값이 등장하게 됩니다. 어떤 알파값이 적당하다고 판단하기는 당장은 어려우나 확실한 건 의사결정에 중요한 역할을 한다는 것입니다. 다음 문서에서는 사용자 프로파일을 작성하고 사용자별로 아이템을 추천해 결과적으로 콘텐트 기반 추천시스템이 작동하는 방법을 알아보겠습니다. Reference [Stanford InfoLab – Recommendation Systems](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf) [Jaccard index – Wikipedia](https://en.wikipedia.org/wiki/Jaccard_index) [코사인 유사도 – 위키백과](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84) |
| json metadata | {"tags":["recommender","data-science","content-based","content-curation"],"image":["https://steemitimages.com/DQmV3jWquY1Y1UatBZnWRmAkfZybYFafKCwGV7KsUgoPgPG/image.png","https://steemitimages.com/DQmSNnLC4CC77VXRwRvZ6thT2sr9VbHHMEBKbwdidaU2bXr/image.png","https://steemitimages.com/DQmYGgKt7LNm3Gc3WENLV7uotG3NFkeGps6XxbQtgRh54kQ/image.png","https://steemitimages.com/DQmUiM7yL6ue7csqCsWnN846kYv9ajKSaVxubYzEeEfcTN9/image.png","https://steemitimages.com/DQmfCJHxbmyviWJKDc4zYoLnfgufWJWVGuR5EJthzASYjcd/image.png","https://steemitimages.com/DQmZGovYJ6XTP6KidEy4EtMSWqdJBWLJxmzb4Bihximf9Gz/image.png"],"links":["https://www.ranks.nl/stopwords/korean","http://infolab.stanford.edu/~ullman/mmds/ch9.pdf","https://en.wikipedia.org/wiki/Jaccard_index","https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 6yvn3l |
| title | 콘텐트 기반 추천 시스템 (1) |
| Transaction Info | Block #20258645/Trx 66e8acad2fdd9cafb8550821d8a067eb4fbdee24 |
View Raw JSON Data
{
"block": 20258645,
"op": [
"comment",
{
"author": "saemi32",
"body": "추천 시스템에는 콘텐트 기반 추천 시스템과 협업필터링 시스템이 있습니다. 이번 장에서는 콘텐트 기반 추천 시스템을 다뤄보도록 하겠습니다. 잠시 되새겨 보면, 콘텐트 기반 추천 시스템은 아이템별 속성을 토대로 유사성을 측정하는 방법이고, 협업 필터링은 사용자와 아이템 사이의 관계를 선호도 행렬로 접근하는 방식입니다.\n\n## 아이템 프로파일\n콘텐트 기반 추천 시스템에서는 각 아이템마다 프로파일을 작성해야합니다. 프로파일은 아이템에 관련된 중요한 특성을 가리킵니다. 예를들어 영화의 경우, 출연 배우, 감독, 제작연도, 장르와 같은 속성이 있습니다(단, 장르는 주관적인 영역이라 사람이 정하여 입력하기보다 후에 기계적으로 할당하기도 합니다). 물론 이외에도 여러가지 다른 속성이 있을 수 있지요.\n\n문서에서 특성(키워드) 추출하기\n물론 공급자나 제작자로부터 여러가지 특성 정보를 명시적으로 입력받을 수도 있습니다. 하지만 어떤 텍스트를 통해서 명백히 드러나지 않는 특성을 뽑아내야하는 경우도 있습니다. 흔히 ‘비슷한 문서’란 연달아 비슷한 단어가 배열되는 것을 의미하지만 추천 시스템에서는 다릅니다. ‘핵심’ 단어가 얼마나 ‘많이’ 함께 등장하는 지가 중요합니다. 가장 흔한 방법으로는 텍스트 마이닝 방법 중 TF-IDF를 활용하는 방법입니다.\n\n* stop word를 제거합니다. 자연어 문장 내에서 많이 쓰이지만 전혀 키워드로 쓸모없는, 영어의 The, is 등과 같은 단어이고, 한국어에서는 이, 그 등과 같은 단어가 해당될 것입니다. stop word는 구글링을 하면 쉽게 찾을 수 있습니다. 영어 stop word는 여기, 한국어 stop word는 [여기](https://www.ranks.nl/stopwords/korean)에서 찾을 수 있습니다. 파이썬 패키지 중에 stop words를 포함하는 것도 있으니 쉽게 사용할 수 있을 것입니다. 하지만 분야별 특징이 있을 수 있으므로 반드시 stop word를 제거하시고 남은 단어들을 눈으로 확인해 보시길 바랍니다.\n\n* 이어서, TF-IDF를 계산합니다. TF-IDF(Term Frequency – Inverse Document Frequency)는 여러 문서의 집합에서 어떤 단어가 어떤 문서에서 얼마나 중요한지를 나타내 주는 식입니다. TF는 한 문서 내에서 어떤 단어가 나타나는 빈도이고, IDF는 어떤 단어가 나타나는 문서 빈도의 역수를 가리킵니다. TF와 IDF값을 곱해 TF-IDF값을 얻어냅니다. 불리언값을 주거나 로그를 이용한 여러가지 수식이 있는데 한글 위키에도 자세한 내용이 있으니 참조합니다.\n\n* 그리고, 적절한 threshold값을 주고, 이 이상의 높은 TF-IDF값을 갖는 단어를 뽑아냅니다.\n\n이런 과정을 거치면 문서는 중요한 단어의 집합으로 표현됩니다.\n\n \n\n#### 문서간 유사성 계산하기\n이제 집합 간 유사성을 계산하는 문제로 치환됐습니다. 몇가지 계산법이 있습니다. 자카드 거리(Jaccard distance)를 계산하거나, 코사인 거리(Cosine distance)를 계산하는 방법입니다. 벡터 공간상 거리 계산에 대해서는 여러 가지 다른 방법을 찾을 수도 있을 것입니다. 자카드 거리는 자카드 인덱스 J(A, B)를 구한 뒤, 전체 집합 1에서 빼는 방법입니다.\n\n\n\n\n\n \n\n코사인 거리는 단어의 집합으로 표현된 문서를, 집합이 아니라 벡터로 간주하고 벡터상 거리를 구하는 방법입니다. 코사인 내적을 구하는 식에서 코사인 유사도 similarity를 구한 뒤 마찬가지로 전체 집합 1에서 빼게 됩니다.\n\n\n\n\n \n\n문서의 유사성을 구하는 방법으로 어휘기반으로 shingling, min-hashing, LSH 등이 비슷하게 있는 데, 나중에 다뤄보도록 합니다.\n\n#### 태그로부터 특성 추출하기(라기보다는 적용하기)\n사용자로부터 문서나 이미지의 태그를 직접 입력받는 방법도 아이템의 특성을 정의하는데 유용한 방법입니다.\n\n \n\n#### 아이템 프로파일(벡터)의 표현\n이제부터 콘텐트 기반 추천 시스템의 핵심을 구성하는 아이템 프로파일의 표현법을 알아보겠습니다. 아이템별 특성-값의 쌍으로 구성되는 벡터를 만드는 과정이라고 보시면 됩니다. 공급자나 제작자로부터 얻어서 쉽게 얻는 정보나 문서로부터 높은 TF-IDF값을 같는 키워드들이 등장하는 벡터를 구성할 수 있습니다.\n\n예를 들어 각각 5명의 배우가 출연하는 A와 B영화를 가정해 봅시다. 만약 2명의 배우가 A와 B 모두에 출연했다면 영화배우의 수는 a, b, c, d, e, f, g, h로 8명일 것입니다. 이럴경우\n\n \n\n이렇게 아이템 프로파일을 구성할 수 있습니다. b와 f 배우가 두 영화 모두에 등장하는 것을 알 수 있습니다. 한편, 각 영화에 3점, 4점이라는 평점이 있다고 가정할 수도 있습니다. 그런 경우엔\n\n \n\n위와 같이 ‘스케일링 팩터’를 이용하면 됩니다. 0과 1이 대부분인 벡터에서 3과 4가 그값 그대로 작용된다면, 코사인값을 계산할 때 평점이 배우에 대한 점수보다 훨씬 중요하게 작용하게 되므로 조절하는 것입니다.\n\n위 벡터 A와 B에 대한 코사인 값을 구해보겠습니다. 위에서 similarity로 제시된 식에 따르면\n\n\n\n\n이렇게 주어지고,위 값은 코사인 값으로 값의 범위는 -1에서 1이며, 알파 값에 따라 아주 다른 값이 등장하게 됩니다. 어떤 알파값이 적당하다고 판단하기는 당장은 어려우나 확실한 건 의사결정에 중요한 역할을 한다는 것입니다.\n\n다음 문서에서는 사용자 프로파일을 작성하고 사용자별로 아이템을 추천해 결과적으로 콘텐트 기반 추천시스템이 작동하는 방법을 알아보겠습니다.\n\n \n\nReference\n\n \n\n[Stanford InfoLab – Recommendation Systems](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf)\n\n[Jaccard index – Wikipedia](https://en.wikipedia.org/wiki/Jaccard_index)\n\n[코사인 유사도 – 위키백과](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84)",
"json_metadata": "{\"tags\":[\"recommender\",\"data-science\",\"content-based\",\"content-curation\"],\"image\":[\"https://steemitimages.com/DQmV3jWquY1Y1UatBZnWRmAkfZybYFafKCwGV7KsUgoPgPG/image.png\",\"https://steemitimages.com/DQmSNnLC4CC77VXRwRvZ6thT2sr9VbHHMEBKbwdidaU2bXr/image.png\",\"https://steemitimages.com/DQmYGgKt7LNm3Gc3WENLV7uotG3NFkeGps6XxbQtgRh54kQ/image.png\",\"https://steemitimages.com/DQmUiM7yL6ue7csqCsWnN846kYv9ajKSaVxubYzEeEfcTN9/image.png\",\"https://steemitimages.com/DQmfCJHxbmyviWJKDc4zYoLnfgufWJWVGuR5EJthzASYjcd/image.png\",\"https://steemitimages.com/DQmZGovYJ6XTP6KidEy4EtMSWqdJBWLJxmzb4Bihximf9Gz/image.png\"],\"links\":[\"https://www.ranks.nl/stopwords/korean\",\"http://infolab.stanford.edu/~ullman/mmds/ch9.pdf\",\"https://en.wikipedia.org/wiki/Jaccard_index\",\"https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "6yvn3l",
"title": "콘텐트 기반 추천 시스템 (1)"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-28T07:00:21",
"trx_id": "66e8acad2fdd9cafb8550821d8a067eb4fbdee24",
"trx_in_block": 46,
"virtual_op": 0
}2018/02/28 06:59:54
2018/02/28 06:59:54
| author | saemi32 |
| permlink | 6yvn3l |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20258636/Trx 345dac6e27a25683d429153f3abc7862aafa7395 |
View Raw JSON Data
{
"block": 20258636,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "6yvn3l",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-28T06:59:54",
"trx_id": "345dac6e27a25683d429153f3abc7862aafa7395",
"trx_in_block": 57,
"virtual_op": 0
}2018/02/28 06:59:54
2018/02/28 06:59:54
| author | saemi32 |
| body | 추천 시스템에는 콘텐트 기반 추천 시스템과 협업필터링 시스템이 있습니다. 이번 장에서는 콘텐트 기반 추천 시스템을 다뤄보도록 하겠습니다. 잠시 되새겨 보면, 콘텐트 기반 추천 시스템은 아이템별 속성을 토대로 유사성을 측정하는 방법이고, 협업 필터링은 사용자와 아이템 사이의 관계를 선호도 행렬로 접근하는 방식입니다. ## 아이템 프로파일 콘텐트 기반 추천 시스템에서는 각 아이템마다 프로파일을 작성해야합니다. 프로파일은 아이템에 관련된 중요한 특성을 가리킵니다. 예를들어 영화의 경우, 출연 배우, 감독, 제작연도, 장르와 같은 속성이 있습니다(단, 장르는 주관적인 영역이라 사람이 정하여 입력하기보다 후에 기계적으로 할당하기도 합니다). 물론 이외에도 여러가지 다른 속성이 있을 수 있지요. 문서에서 특성(키워드) 추출하기 물론 공급자나 제작자로부터 여러가지 특성 정보를 명시적으로 입력받을 수도 있습니다. 하지만 어떤 텍스트를 통해서 명백히 드러나지 않는 특성을 뽑아내야하는 경우도 있습니다. 흔히 ‘비슷한 문서’란 연달아 비슷한 단어가 배열되는 것을 의미하지만 추천 시스템에서는 다릅니다. ‘핵심’ 단어가 얼마나 ‘많이’ 함께 등장하는 지가 중요합니다. 가장 흔한 방법으로는 텍스트 마이닝 방법 중 TF-IDF를 활용하는 방법입니다. * stop word를 제거합니다. 자연어 문장 내에서 많이 쓰이지만 전혀 키워드로 쓸모없는, 영어의 The, is 등과 같은 단어이고, 한국어에서는 이, 그 등과 같은 단어가 해당될 것입니다. stop word는 구글링을 하면 쉽게 찾을 수 있습니다. 영어 stop word는 여기, 한국어 stop word는 [여기](https://www.ranks.nl/stopwords/korean)에서 찾을 수 있습니다. 파이썬 패키지 중에 stop words를 포함하는 것도 있으니 쉽게 사용할 수 있을 것입니다. 하지만 분야별 특징이 있을 수 있으므로 반드시 stop word를 제거하시고 남은 단어들을 눈으로 확인해 보시길 바랍니다. * 이어서, TF-IDF를 계산합니다. TF-IDF(Term Frequency – Inverse Document Frequency)는 여러 문서의 집합에서 어떤 단어가 어떤 문서에서 얼마나 중요한지를 나타내 주는 식입니다. TF는 한 문서 내에서 어떤 단어가 나타나는 빈도이고, IDF는 어떤 단어가 나타나는 문서 빈도의 역수를 가리킵니다. TF와 IDF값을 곱해 TF-IDF값을 얻어냅니다. 불리언값을 주거나 로그를 이용한 여러가지 수식이 있는데 한글 위키에도 자세한 내용이 있으니 참조합니다. * 그리고, 적절한 threshold값을 주고, 이 이상의 높은 TF-IDF값을 갖는 단어를 뽑아냅니다. 이런 과정을 거치면 문서는 중요한 단어의 집합으로 표현됩니다. #### 문서간 유사성 계산하기 이제 집합 간 유사성을 계산하는 문제로 치환됐습니다. 몇가지 계산법이 있습니다. 자카드 거리(Jaccard distance)를 계산하거나, 코사인 거리(Cosine distance)를 계산하는 방법입니다. 벡터 공간상 거리 계산에 대해서는 여러 가지 다른 방법을 찾을 수도 있을 것입니다. 자카드 거리는 자카드 인덱스 J(A, B)를 구한 뒤, 전체 집합 1에서 빼는 방법입니다.   코사인 거리는 단어의 집합으로 표현된 문서를, 집합이 아니라 벡터로 간주하고 벡터상 거리를 구하는 방법입니다. 코사인 내적을 구하는 식에서 코사인 유사도 similarity를 구한 뒤 마찬가지로 전체 집합 1에서 빼게 됩니다.  문서의 유사성을 구하는 방법으로 어휘기반으로 shingling, min-hashing, LSH 등이 비슷하게 있는 데, 나중에 다뤄보도록 합니다. #### 태그로부터 특성 추출하기(라기보다는 적용하기) 사용자로부터 문서나 이미지의 태그를 직접 입력받는 방법도 아이템의 특성을 정의하는데 유용한 방법입니다. #### 아이템 프로파일(벡터)의 표현 이제부터 콘텐트 기반 추천 시스템의 핵심을 구성하는 아이템 프로파일의 표현법을 알아보겠습니다. 아이템별 특성-값의 쌍으로 구성되는 벡터를 만드는 과정이라고 보시면 됩니다. 공급자나 제작자로부터 얻어서 쉽게 얻는 정보나 문서로부터 높은 TF-IDF값을 같는 키워드들이 등장하는 벡터를 구성할 수 있습니다. 예를 들어 각각 5명의 배우가 출연하는 A와 B영화를 가정해 봅시다. 만약 2명의 배우가 A와 B 모두에 출연했다면 영화배우의 수는 a, b, c, d, e, f, g, h로 8명일 것입니다. 이럴경우  이렇게 아이템 프로파일을 구성할 수 있습니다. b와 f 배우가 두 영화 모두에 등장하는 것을 알 수 있습니다. 한편, 각 영화에 3점, 4점이라는 평점이 있다고 가정할 수도 있습니다. 그런 경우엔  위와 같이 ‘스케일링 팩터’를 이용하면 됩니다. 0과 1이 대부분인 벡터에서 3과 4가 그값 그대로 작용된다면, 코사인값을 계산할 때 평점이 배우에 대한 점수보다 훨씬 중요하게 작용하게 되므로 조절하는 것입니다. 위 벡터 A와 B에 대한 코사인 값을 구해보겠습니다. 위에서 similarity로 제시된 식에 따르면  이렇게 주어지고,위 값은 코사인 값으로 값의 범위는 -1에서 1이며, 알파 값에 따라 아주 다른 값이 등장하게 됩니다. 어떤 알파값이 적당하다고 판단하기는 당장은 어려우나 확실한 건 의사결정에 중요한 역할을 한다는 것입니다. 다음 문서에서는 사용자 프로파일을 작성하고 사용자별로 아이템을 추천해 결과적으로 콘텐트 기반 추천시스템이 작동하는 방법을 알아보겠습니다. Reference [Stanford InfoLab – Recommendation Systems](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf) [Jaccard index – Wikipedia](https://en.wikipedia.org/wiki/Jaccard_index) [코사인 유사도 – 위키백과](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84) |
| json metadata | {"tags":["recommender","data-science","content-based","content-curation"],"image":["https://steemitimages.com/DQmV3jWquY1Y1UatBZnWRmAkfZybYFafKCwGV7KsUgoPgPG/image.png","https://steemitimages.com/DQmSNnLC4CC77VXRwRvZ6thT2sr9VbHHMEBKbwdidaU2bXr/image.png","https://steemitimages.com/DQmYGgKt7LNm3Gc3WENLV7uotG3NFkeGps6XxbQtgRh54kQ/image.png","https://steemitimages.com/DQmUiM7yL6ue7csqCsWnN846kYv9ajKSaVxubYzEeEfcTN9/image.png","https://steemitimages.com/DQmfCJHxbmyviWJKDc4zYoLnfgufWJWVGuR5EJthzASYjcd/image.png","https://steemitimages.com/DQmZGovYJ6XTP6KidEy4EtMSWqdJBWLJxmzb4Bihximf9Gz/image.png"],"links":["https://www.ranks.nl/stopwords/korean","http://infolab.stanford.edu/~ullman/mmds/ch9.pdf","https://en.wikipedia.org/wiki/Jaccard_index","https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 6yvn3l |
| title | 콘텐트 기반 추천 시스템 |
| Transaction Info | Block #20258636/Trx 345dac6e27a25683d429153f3abc7862aafa7395 |
View Raw JSON Data
{
"block": 20258636,
"op": [
"comment",
{
"author": "saemi32",
"body": "추천 시스템에는 콘텐트 기반 추천 시스템과 협업필터링 시스템이 있습니다. 이번 장에서는 콘텐트 기반 추천 시스템을 다뤄보도록 하겠습니다. 잠시 되새겨 보면, 콘텐트 기반 추천 시스템은 아이템별 속성을 토대로 유사성을 측정하는 방법이고, 협업 필터링은 사용자와 아이템 사이의 관계를 선호도 행렬로 접근하는 방식입니다.\n\n## 아이템 프로파일\n콘텐트 기반 추천 시스템에서는 각 아이템마다 프로파일을 작성해야합니다. 프로파일은 아이템에 관련된 중요한 특성을 가리킵니다. 예를들어 영화의 경우, 출연 배우, 감독, 제작연도, 장르와 같은 속성이 있습니다(단, 장르는 주관적인 영역이라 사람이 정하여 입력하기보다 후에 기계적으로 할당하기도 합니다). 물론 이외에도 여러가지 다른 속성이 있을 수 있지요.\n\n문서에서 특성(키워드) 추출하기\n물론 공급자나 제작자로부터 여러가지 특성 정보를 명시적으로 입력받을 수도 있습니다. 하지만 어떤 텍스트를 통해서 명백히 드러나지 않는 특성을 뽑아내야하는 경우도 있습니다. 흔히 ‘비슷한 문서’란 연달아 비슷한 단어가 배열되는 것을 의미하지만 추천 시스템에서는 다릅니다. ‘핵심’ 단어가 얼마나 ‘많이’ 함께 등장하는 지가 중요합니다. 가장 흔한 방법으로는 텍스트 마이닝 방법 중 TF-IDF를 활용하는 방법입니다.\n\n* stop word를 제거합니다. 자연어 문장 내에서 많이 쓰이지만 전혀 키워드로 쓸모없는, 영어의 The, is 등과 같은 단어이고, 한국어에서는 이, 그 등과 같은 단어가 해당될 것입니다. stop word는 구글링을 하면 쉽게 찾을 수 있습니다. 영어 stop word는 여기, 한국어 stop word는 [여기](https://www.ranks.nl/stopwords/korean)에서 찾을 수 있습니다. 파이썬 패키지 중에 stop words를 포함하는 것도 있으니 쉽게 사용할 수 있을 것입니다. 하지만 분야별 특징이 있을 수 있으므로 반드시 stop word를 제거하시고 남은 단어들을 눈으로 확인해 보시길 바랍니다.\n\n* 이어서, TF-IDF를 계산합니다. TF-IDF(Term Frequency – Inverse Document Frequency)는 여러 문서의 집합에서 어떤 단어가 어떤 문서에서 얼마나 중요한지를 나타내 주는 식입니다. TF는 한 문서 내에서 어떤 단어가 나타나는 빈도이고, IDF는 어떤 단어가 나타나는 문서 빈도의 역수를 가리킵니다. TF와 IDF값을 곱해 TF-IDF값을 얻어냅니다. 불리언값을 주거나 로그를 이용한 여러가지 수식이 있는데 한글 위키에도 자세한 내용이 있으니 참조합니다.\n\n* 그리고, 적절한 threshold값을 주고, 이 이상의 높은 TF-IDF값을 갖는 단어를 뽑아냅니다.\n\n이런 과정을 거치면 문서는 중요한 단어의 집합으로 표현됩니다.\n\n \n\n#### 문서간 유사성 계산하기\n이제 집합 간 유사성을 계산하는 문제로 치환됐습니다. 몇가지 계산법이 있습니다. 자카드 거리(Jaccard distance)를 계산하거나, 코사인 거리(Cosine distance)를 계산하는 방법입니다. 벡터 공간상 거리 계산에 대해서는 여러 가지 다른 방법을 찾을 수도 있을 것입니다. 자카드 거리는 자카드 인덱스 J(A, B)를 구한 뒤, 전체 집합 1에서 빼는 방법입니다.\n\n\n\n\n\n \n\n코사인 거리는 단어의 집합으로 표현된 문서를, 집합이 아니라 벡터로 간주하고 벡터상 거리를 구하는 방법입니다. 코사인 내적을 구하는 식에서 코사인 유사도 similarity를 구한 뒤 마찬가지로 전체 집합 1에서 빼게 됩니다.\n\n\n\n\n \n\n문서의 유사성을 구하는 방법으로 어휘기반으로 shingling, min-hashing, LSH 등이 비슷하게 있는 데, 나중에 다뤄보도록 합니다.\n\n#### 태그로부터 특성 추출하기(라기보다는 적용하기)\n사용자로부터 문서나 이미지의 태그를 직접 입력받는 방법도 아이템의 특성을 정의하는데 유용한 방법입니다.\n\n \n\n#### 아이템 프로파일(벡터)의 표현\n이제부터 콘텐트 기반 추천 시스템의 핵심을 구성하는 아이템 프로파일의 표현법을 알아보겠습니다. 아이템별 특성-값의 쌍으로 구성되는 벡터를 만드는 과정이라고 보시면 됩니다. 공급자나 제작자로부터 얻어서 쉽게 얻는 정보나 문서로부터 높은 TF-IDF값을 같는 키워드들이 등장하는 벡터를 구성할 수 있습니다.\n\n예를 들어 각각 5명의 배우가 출연하는 A와 B영화를 가정해 봅시다. 만약 2명의 배우가 A와 B 모두에 출연했다면 영화배우의 수는 a, b, c, d, e, f, g, h로 8명일 것입니다. 이럴경우\n\n \n\n이렇게 아이템 프로파일을 구성할 수 있습니다. b와 f 배우가 두 영화 모두에 등장하는 것을 알 수 있습니다. 한편, 각 영화에 3점, 4점이라는 평점이 있다고 가정할 수도 있습니다. 그런 경우엔\n\n \n\n위와 같이 ‘스케일링 팩터’를 이용하면 됩니다. 0과 1이 대부분인 벡터에서 3과 4가 그값 그대로 작용된다면, 코사인값을 계산할 때 평점이 배우에 대한 점수보다 훨씬 중요하게 작용하게 되므로 조절하는 것입니다.\n\n위 벡터 A와 B에 대한 코사인 값을 구해보겠습니다. 위에서 similarity로 제시된 식에 따르면\n\n\n\n\n이렇게 주어지고,위 값은 코사인 값으로 값의 범위는 -1에서 1이며, 알파 값에 따라 아주 다른 값이 등장하게 됩니다. 어떤 알파값이 적당하다고 판단하기는 당장은 어려우나 확실한 건 의사결정에 중요한 역할을 한다는 것입니다.\n\n다음 문서에서는 사용자 프로파일을 작성하고 사용자별로 아이템을 추천해 결과적으로 콘텐트 기반 추천시스템이 작동하는 방법을 알아보겠습니다.\n\n \n\nReference\n\n \n\n[Stanford InfoLab – Recommendation Systems](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf)\n\n[Jaccard index – Wikipedia](https://en.wikipedia.org/wiki/Jaccard_index)\n\n[코사인 유사도 – 위키백과](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84)",
"json_metadata": "{\"tags\":[\"recommender\",\"data-science\",\"content-based\",\"content-curation\"],\"image\":[\"https://steemitimages.com/DQmV3jWquY1Y1UatBZnWRmAkfZybYFafKCwGV7KsUgoPgPG/image.png\",\"https://steemitimages.com/DQmSNnLC4CC77VXRwRvZ6thT2sr9VbHHMEBKbwdidaU2bXr/image.png\",\"https://steemitimages.com/DQmYGgKt7LNm3Gc3WENLV7uotG3NFkeGps6XxbQtgRh54kQ/image.png\",\"https://steemitimages.com/DQmUiM7yL6ue7csqCsWnN846kYv9ajKSaVxubYzEeEfcTN9/image.png\",\"https://steemitimages.com/DQmfCJHxbmyviWJKDc4zYoLnfgufWJWVGuR5EJthzASYjcd/image.png\",\"https://steemitimages.com/DQmZGovYJ6XTP6KidEy4EtMSWqdJBWLJxmzb4Bihximf9Gz/image.png\"],\"links\":[\"https://www.ranks.nl/stopwords/korean\",\"http://infolab.stanford.edu/~ullman/mmds/ch9.pdf\",\"https://en.wikipedia.org/wiki/Jaccard_index\",\"https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "6yvn3l",
"title": "콘텐트 기반 추천 시스템"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-28T06:59:54",
"trx_id": "345dac6e27a25683d429153f3abc7862aafa7395",
"trx_in_block": 57,
"virtual_op": 0
}saemi32followed @raise-me-up2018/02/27 06:21:30
saemi32followed @raise-me-up
2018/02/27 06:21:30
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"raise-me-up","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20229071/Trx bdc676bb0ab4b5c1804c9e4176a2ac7b1376f65b |
View Raw JSON Data
{
"block": 20229071,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"raise-me-up\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T06:21:30",
"trx_id": "bdc676bb0ab4b5c1804c9e4176a2ac7b1376f65b",
"trx_in_block": 47,
"virtual_op": 0
}2018/02/27 06:21:30
2018/02/27 06:21:30
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"odl","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20229071/Trx a2ec6baae0a94a74e089f1b85a9b758622a58083 |
View Raw JSON Data
{
"block": 20229071,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"odl\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T06:21:30",
"trx_id": "a2ec6baae0a94a74e089f1b85a9b758622a58083",
"trx_in_block": 30,
"virtual_op": 0
}2018/02/27 06:21:30
2018/02/27 06:21:30
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"melindaa","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20229071/Trx e29e251b489d0b9fa100d5da93b39f8bb81f04d2 |
View Raw JSON Data
{
"block": 20229071,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"melindaa\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T06:21:30",
"trx_id": "e29e251b489d0b9fa100d5da93b39f8bb81f04d2",
"trx_in_block": 25,
"virtual_op": 0
}saemi32followed @cryptoriddler2018/02/27 06:21:30
saemi32followed @cryptoriddler
2018/02/27 06:21:30
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"cryptoriddler","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20229071/Trx 48fe16167adb5e40fcaa7572c221b81bbdc6c74d |
View Raw JSON Data
{
"block": 20229071,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"cryptoriddler\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T06:21:30",
"trx_id": "48fe16167adb5e40fcaa7572c221b81bbdc6c74d",
"trx_in_block": 15,
"virtual_op": 0
}2018/02/27 06:20:54
2018/02/27 06:20:54
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"timsaid","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20229059/Trx 2cf57082c75a83c16b6718ef7324066413da2593 |
View Raw JSON Data
{
"block": 20229059,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"timsaid\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T06:20:54",
"trx_id": "2cf57082c75a83c16b6718ef7324066413da2593",
"trx_in_block": 55,
"virtual_op": 0
}saemi32published a new post: apricot-blossoms-in-jeju-island-south-korea2018/02/27 05:53:48
saemi32published a new post: apricot-blossoms-in-jeju-island-south-korea
2018/02/27 05:53:48
| author | saemi32 |
| body | @@ -1060,20 +1060,28 @@ ind -so that - they +'s why they have wro |
| json metadata | {"tags":["photography","apricot","blossom","korea","nature"],"image":["https://steemitimages.com/DQma9cTZ7uggwm6CadwEA5w38P2bBPga5hjBgANbynw5EaQ/image.png","https://steemitimages.com/DQmcNJ3P4QvMwZ8FgE4o4Bz4bWjSXCxTNPWVTf3CWNL6tJx/image.png","https://steemitimages.com/DQmbTLKC1Yue3VEP8ApHdVzuA15Da3crSh2tPyuCD4Uzcbe/image.png","https://steemitimages.com/DQmczQLuKKBHaNhnBxTBVwEZEydWWopYxPvGSVfhYVq9wVG/image.png"],"links":["https://en.wikipedia.org/wiki/Lee_Jung-seob","http://www.norimae.com/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | photography |
| permlink | apricot-blossoms-in-jeju-island-south-korea |
| title | Apricot blossoms in Jeju island, South Korea |
| Transaction Info | Block #20228517/Trx 09af897ca9231cd4a5b2a39da1ef73cb03d24cb5 |
View Raw JSON Data
{
"block": 20228517,
"op": [
"comment",
{
"author": "saemi32",
"body": "@@ -1060,20 +1060,28 @@\n ind \n-so \n that\n- they\n+'s why they have\n wro\n",
"json_metadata": "{\"tags\":[\"photography\",\"apricot\",\"blossom\",\"korea\",\"nature\"],\"image\":[\"https://steemitimages.com/DQma9cTZ7uggwm6CadwEA5w38P2bBPga5hjBgANbynw5EaQ/image.png\",\"https://steemitimages.com/DQmcNJ3P4QvMwZ8FgE4o4Bz4bWjSXCxTNPWVTf3CWNL6tJx/image.png\",\"https://steemitimages.com/DQmbTLKC1Yue3VEP8ApHdVzuA15Da3crSh2tPyuCD4Uzcbe/image.png\",\"https://steemitimages.com/DQmczQLuKKBHaNhnBxTBVwEZEydWWopYxPvGSVfhYVq9wVG/image.png\"],\"links\":[\"https://en.wikipedia.org/wiki/Lee_Jung-seob\",\"http://www.norimae.com/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "photography",
"permlink": "apricot-blossoms-in-jeju-island-south-korea",
"title": "Apricot blossoms in Jeju island, South Korea"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T05:53:48",
"trx_id": "09af897ca9231cd4a5b2a39da1ef73cb03d24cb5",
"trx_in_block": 25,
"virtual_op": 0
}2018/02/27 05:46:42
2018/02/27 05:46:42
| id | follow |
| json | ["follow",{"follower":"saemi32","following":"haejin","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["saemi32"] |
| Transaction Info | Block #20228375/Trx b602c381e8566c9df22ab74c19e50ee99d6af27b |
View Raw JSON Data
{
"block": 20228375,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"saemi32\",\"following\":\"haejin\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"saemi32"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T05:46:42",
"trx_id": "b602c381e8566c9df22ab74c19e50ee99d6af27b",
"trx_in_block": 28,
"virtual_op": 0
}saemi32upvoted (100.00%) @kr-marketing / 1-by-keepit2018/02/27 05:45:18
saemi32upvoted (100.00%) @kr-marketing / 1-by-keepit
2018/02/27 05:45:18
| author | kr-marketing |
| permlink | 1-by-keepit |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20228347/Trx b897be5908f0b59f5eac0a0fd414783e4033d633 |
View Raw JSON Data
{
"block": 20228347,
"op": [
"vote",
{
"author": "kr-marketing",
"permlink": "1-by-keepit",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T05:45:18",
"trx_id": "b897be5908f0b59f5eac0a0fd414783e4033d633",
"trx_in_block": 46,
"virtual_op": 0
}saemi32upvoted (100.00%) @saemi32 / apricot-blossoms-in-jeju-island-south-korea2018/02/27 05:41:12
saemi32upvoted (100.00%) @saemi32 / apricot-blossoms-in-jeju-island-south-korea
2018/02/27 05:41:12
| author | saemi32 |
| permlink | apricot-blossoms-in-jeju-island-south-korea |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20228265/Trx abeedb7a882183be64dc4669a35761cc4010a543 |
View Raw JSON Data
{
"block": 20228265,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "apricot-blossoms-in-jeju-island-south-korea",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T05:41:12",
"trx_id": "abeedb7a882183be64dc4669a35761cc4010a543",
"trx_in_block": 49,
"virtual_op": 0
}saemi32published a new post: apricot-blossoms-in-jeju-island-south-korea2018/02/27 05:41:12
saemi32published a new post: apricot-blossoms-in-jeju-island-south-korea
2018/02/27 05:41:12
| author | saemi32 |
| body | * Scientific name: _Prunus mume_ * Korean name: 매화 In the southern part of south Korea like Jeju island, Apricot blossoms blooms in early February. These trees are very common in Korea, Japan, Taiwan, and China. Apricot blossoms flower leaves are colored in various color- red, pink, white, yellow - and it has less than 3cm diameter. I took this picture in front of a great Korean modern artist [Lee Jungseob](https://en.wikipedia.org/wiki/Lee_Jung-seob)'s old place on Feb 7.   Other kind of apicot blossoms. White flower leaves. I took this picture in [Norimae Park](http://www.norimae.com/).   In the era of Joseon dynasty, many people though Apricot blossoms as a symbol of strong and honest mind so that they wrote and drew this plant as an important material of their poetry and picture. |
| json metadata | {"tags":["photography","apricot","blossom","korea","nature"],"image":["https://steemitimages.com/DQma9cTZ7uggwm6CadwEA5w38P2bBPga5hjBgANbynw5EaQ/image.png","https://steemitimages.com/DQmcNJ3P4QvMwZ8FgE4o4Bz4bWjSXCxTNPWVTf3CWNL6tJx/image.png","https://steemitimages.com/DQmbTLKC1Yue3VEP8ApHdVzuA15Da3crSh2tPyuCD4Uzcbe/image.png","https://steemitimages.com/DQmczQLuKKBHaNhnBxTBVwEZEydWWopYxPvGSVfhYVq9wVG/image.png"],"links":["https://en.wikipedia.org/wiki/Lee_Jung-seob","http://www.norimae.com/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | photography |
| permlink | apricot-blossoms-in-jeju-island-south-korea |
| title | Apricot blossoms in Jeju island, South Korea |
| Transaction Info | Block #20228265/Trx abeedb7a882183be64dc4669a35761cc4010a543 |
View Raw JSON Data
{
"block": 20228265,
"op": [
"comment",
{
"author": "saemi32",
"body": "* Scientific name: _Prunus mume_\n* Korean name: 매화\n\nIn the southern part of south Korea like Jeju island, Apricot blossoms blooms in early February. These trees are very common in Korea, Japan, Taiwan, and China. Apricot blossoms flower leaves are colored in various color- red, pink, white, yellow - and it has less than 3cm diameter.\n\nI took this picture in front of a great Korean modern artist [Lee Jungseob](https://en.wikipedia.org/wiki/Lee_Jung-seob)'s old place on Feb 7.\n\n\n\n\n\nOther kind of apicot blossoms. White flower leaves. I took this picture in [Norimae Park](http://www.norimae.com/). \n\n\n\n\n\nIn the era of Joseon dynasty, many people though Apricot blossoms as a symbol of strong and honest mind so that they wrote and drew this plant as an important material of their poetry and picture.",
"json_metadata": "{\"tags\":[\"photography\",\"apricot\",\"blossom\",\"korea\",\"nature\"],\"image\":[\"https://steemitimages.com/DQma9cTZ7uggwm6CadwEA5w38P2bBPga5hjBgANbynw5EaQ/image.png\",\"https://steemitimages.com/DQmcNJ3P4QvMwZ8FgE4o4Bz4bWjSXCxTNPWVTf3CWNL6tJx/image.png\",\"https://steemitimages.com/DQmbTLKC1Yue3VEP8ApHdVzuA15Da3crSh2tPyuCD4Uzcbe/image.png\",\"https://steemitimages.com/DQmczQLuKKBHaNhnBxTBVwEZEydWWopYxPvGSVfhYVq9wVG/image.png\"],\"links\":[\"https://en.wikipedia.org/wiki/Lee_Jung-seob\",\"http://www.norimae.com/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "photography",
"permlink": "apricot-blossoms-in-jeju-island-south-korea",
"title": "Apricot blossoms in Jeju island, South Korea"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T05:41:12",
"trx_id": "abeedb7a882183be64dc4669a35761cc4010a543",
"trx_in_block": 49,
"virtual_op": 0
}steem-networkreplied to @saemi32 / re-4zjajb-20180227t0516432018/02/27 05:16:45
steem-networkreplied to @saemi32 / re-4zjajb-20180227t051643
2018/02/27 05:16:45
| author | steem-network |
| body | <html> <p>Congratulations <a href="/@saemi32" target="_blank">@saemi32</a>, you have decided to take the next big step with your first post! The Steem Network Team wishes you a great time among this awesome community.</p> <hr> <div class="pull-left"><img src="https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif" alt="Thumbs up for Steem Network´s strategy" title="I suggest Steem Network´s strategy" width="320" height="222"></div> <h1>The proven road to boost your personal success in this amazing Steem Network</h1> <p>Do you already know that awesome content will get great profits by following these <a href="/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26" target="_blank" alt="Steem Network" title="Follow Steem Network´s suggestions to boost your success">simple steps</a>, that have been worked out by experts?</p> </html> |
| json metadata | {"tags": ["steem-network"], "users": ["steem-network", "saemi32"], "image": ["https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif"], "links": ["/@saemi32", "/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26"], "community": "steem-network", "app": "steem-network/1.0.1", "format": "html"} |
| parent author | saemi32 |
| parent permlink | 4zjajb |
| permlink | re-4zjajb-20180227t051643 |
| title | |
| Transaction Info | Block #20227776/Trx 287591f8dada042e8b7f6a6fb496d3b8dca28723 |
View Raw JSON Data
{
"block": 20227776,
"op": [
"comment",
{
"author": "steem-network",
"body": "<html>\n<p>Congratulations <a href=\"/@saemi32\" target=\"_blank\">@saemi32</a>, you have decided to take the next big step with your first post! The Steem Network Team wishes you a great time among this awesome community.</p>\n<hr>\n<div class=\"pull-left\"><img src=\"https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif\" alt=\"Thumbs up for Steem Network´s strategy\" title=\"I suggest Steem Network´s strategy\" width=\"320\" height=\"222\"></div>\n<h1>The proven road to boost your personal success in this amazing Steem Network</h1>\n<p>Do you already know that awesome content will get great profits by following these <a href=\"/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26\" target=\"_blank\" alt=\"Steem Network\" title=\"Follow Steem Network´s suggestions to boost your success\">simple steps</a>, that have been worked out by experts?</p>\n</html>",
"json_metadata": "{\"tags\": [\"steem-network\"], \"users\": [\"steem-network\", \"saemi32\"], \"image\": [\"https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif\"], \"links\": [\"/@saemi32\", \"/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26\"], \"community\": \"steem-network\", \"app\": \"steem-network/1.0.1\", \"format\": \"html\"}",
"parent_author": "saemi32",
"parent_permlink": "4zjajb",
"permlink": "re-4zjajb-20180227t051643",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T05:16:45",
"trx_id": "287591f8dada042e8b7f6a6fb496d3b8dca28723",
"trx_in_block": 13,
"virtual_op": 0
}2018/02/27 04:58:00
2018/02/27 04:58:00
| author | saemi32 |
| body | @@ -1244,10 +1244,8 @@ %EB%8B%A4.%0A%0A -+ %EC%84%A0%ED%98%B8%EB%8F%84 @@ -1266,16 +1266,20 @@ %EA%B0%80%EC%A7%80 %EC%9E%85%EB%8B%88%EB%8B%A4. +%0A%0A* %EC%B2%AB%EC%A7%B8, %EA%B0%9C%EB%B3%84 %EC%82%AC @@ -1299,16 +1299,19 @@ %EC%9C%A0%EB%8F%84%ED%95%98%EB%8A%94 %EA%B2%83. +%0A* %EB%91%98%EC%A7%B8, %EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98 @@ -1326,16 +1326,18 @@ %EB%8A%94 %EA%B2%83%EC%9E%85%EB%8B%88%EB%8B%A4. +%0A%0A %EC%B2%AB%EB%B2%88%EC%A7%B8 %EB%B0%A9%EB%B2%95%EC%9D%80 @@ -1425,16 +1425,8 @@ %EC%9C%A0%ED%8A%9C%EB%B8%8C -(%EB%98%90 %EB%93%B1%EC%9E%A5;;) %EB%8A%94 %EC%82%AC%EC%9A%A9 |
| json metadata | {"tags":["recommender","data-science","preference-matrix","algorithm"],"image":["https://steemitimages.com/DQmTj8C5czRao6RanXKZ8kmPzcBWtRBwBDzPZQoUCPhgrLg/image.png","https://steemitimages.com/DQmaXbZPtrN3y85522daoY1ZKSV3ZjSJ9KEeDxqJd7B1ECo/image.png"],"links":["http://recommended.springernature.com/recommended/","http://infolab.stanford.edu/~ullman/mmds/ch9.pdf"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 2lrvhy |
| title | 추천시스템 모델링 |
| Transaction Info | Block #20227411/Trx 01048357f4787d773579bab608cd99b7af0fb882 |
View Raw JSON Data
{
"block": 20227411,
"op": [
"comment",
{
"author": "saemi32",
"body": "@@ -1244,10 +1244,8 @@\n %EB%8B%A4.%0A%0A\n-+ \n %EC%84%A0%ED%98%B8%EB%8F%84 \n@@ -1266,16 +1266,20 @@\n %EA%B0%80%EC%A7%80 %EC%9E%85%EB%8B%88%EB%8B%A4. \n+%0A%0A* \n %EC%B2%AB%EC%A7%B8, %EA%B0%9C%EB%B3%84 %EC%82%AC\n@@ -1299,16 +1299,19 @@\n %EC%9C%A0%EB%8F%84%ED%95%98%EB%8A%94 %EA%B2%83. \n+%0A* \n %EB%91%98%EC%A7%B8, %EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98\n@@ -1326,16 +1326,18 @@\n %EB%8A%94 %EA%B2%83%EC%9E%85%EB%8B%88%EB%8B%A4. \n+%0A%0A\n %EC%B2%AB%EB%B2%88%EC%A7%B8 %EB%B0%A9%EB%B2%95%EC%9D%80 \n@@ -1425,16 +1425,8 @@\n %EC%9C%A0%ED%8A%9C%EB%B8%8C\n-(%EB%98%90 %EB%93%B1%EC%9E%A5;;)\n %EB%8A%94 %EC%82%AC%EC%9A%A9\n",
"json_metadata": "{\"tags\":[\"recommender\",\"data-science\",\"preference-matrix\",\"algorithm\"],\"image\":[\"https://steemitimages.com/DQmTj8C5czRao6RanXKZ8kmPzcBWtRBwBDzPZQoUCPhgrLg/image.png\",\"https://steemitimages.com/DQmaXbZPtrN3y85522daoY1ZKSV3ZjSJ9KEeDxqJd7B1ECo/image.png\"],\"links\":[\"http://recommended.springernature.com/recommended/\",\"http://infolab.stanford.edu/~ullman/mmds/ch9.pdf\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "2lrvhy",
"title": "추천시스템 모델링"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T04:58:00",
"trx_id": "01048357f4787d773579bab608cd99b7af0fb882",
"trx_in_block": 31,
"virtual_op": 0
}2018/02/27 04:56:39
2018/02/27 04:56:39
| author | saemi32 |
| permlink | 2lrvhy |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20227386/Trx 58d6a8dcebb26d29009817ea09fc73cd07ea4850 |
View Raw JSON Data
{
"block": 20227386,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "2lrvhy",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T04:56:39",
"trx_id": "58d6a8dcebb26d29009817ea09fc73cd07ea4850",
"trx_in_block": 1,
"virtual_op": 0
}2018/02/27 04:56:39
2018/02/27 04:56:39
| author | saemi32 |
| body | 추천시스템의 모델은 ‘선호도 행렬’을 주로 사용합니다. 그리고 온라인 판매에서 중요한 역할을 하는 ‘롱테일’의 법칙을 다루어 보겠습니다. ## 선호도 행렬 추천 시스템에서 ‘사용자’와 ‘아이템’이 가장 중요한 요소라고 볼 수 있습니다. 사용자는 특정한 아이템에 대한 선호를 가지고 있고, 이들 두 요소는 행과 열로 하는 행렬로 표현됩니다. 각 엔트리를 이루는 값들은 순서집합(ordered set)으로 주어지는데요. 값이 사용자가 평가한 아이템의 평점의 크기를 의미하기 때문입니다. 선호도 행렬은 대체로 희소행렬(sparse matrix)라는 가정이 주어집니다. 희소행렬은 대부분 행렬의 값이 ‘알 수 없음'(unknown) 상태인 것을 의미합니다. 사용자가 매우 많고, 사용자가 좋아하는 아이템은 임의의 그룹별로 정해져 있기 때문입니다. 저희 시스템에서도 수없이 많은 논문이 언급되지만, 생물정보학을 전공하는 사람이 물리학의 논문을 평가했을 가능성이 매우 희박합니다. 희소행렬 속 ‘알 수 없음’ 값은 추천 시스템이 특정 사용자의 특정 아이템에 대한 선호를 명시적으로 알 수 없을 때를 가리킵니다. 교재의 예시를 살펴보겠습니다.  선호도 행렬입니다. A~D의 사용자가 HP1~HP3, TW, SW1~SW3까지 영화에 1~5점까지 점수를 주었습니다. 다수의 빈 칸을 발견할 수 있는 희소행렬입니다. 추천 시스템의 목적은 바로 이 빈 칸의 값을 예측하여 채워 넣는 것입니다. 아마 영화의 제작사, 배급사, 출연자나 이름의 비슷한 정도 등으로 대강의 유사성을 알 수 있습니다. 예측컨대, A 사용자는 SW2나 SW3을 좋아하지 않을 것입니다. SW1을 한 번 봤는데 1점 줬다면, 그 시리즈물을 좋아할 리 없습니다. C 사용자가 SW1, SW2에 비슷한 점수를 준 것을 보면 알 수 있지요. 아마 추천 시스템마다 조금씩 사용목적은 다르겠지만, 선호도 행렬의 모든 빈칸을 채워넣는 과정이 필수입니다. 그리고 한 행 안에서 예측된 점수 중 가장 높은 점수를 찾아봐야합니다. 사용자마다 개인화된 추천을 해 줄 예정이니까요. 대부분 응용 시스템에서는 모든 아이템에 대한 사용자별 선호도를 제시하기보다 좋아할 몇몇 개의 아이템을 제시합니다. 따라서 높은 점수가 예상되는 모든 아이템에 대한 계산을 수행하기보다 적절한 부분집합을 먼저 찾는 것이 합리적일 것입니다. + 선호도 행렬을 만드는 방법은 두 가지 입니다. 첫째, 개별 사용자가 평점을 매기도록 유도하는 것. 둘째, 사용자의 행위를 저장하는 것입니다. 첫번째 방법은 효율성에 문제가 있습니다. 대부분의 사용자는 평점 매기기를 귀찮아할테지요. 넷플릭스, 유튜브 등이 평점 시스템을 도입하고 있습니다. 반면 아마존과 유튜브(또 등장;;)는 사용자가 ‘like’를 누르는 행위를 1로 지정해 저장합니다. 이럴 경우 0과 1만 존재해 아이템의 선호도를 평가하기가 어렵게 됩니다. 적합한 상황을 선택하여 선호도 행렬 만드는 방법을 결정해야할 것입니다. ## 롱테일 법칙 추천 시스템을 만들기 전에 ‘롱테일 법칙'(long-tail phenomenon)을 알아보도록 합니다. 오프라인 배달이나 상점에서는 자원이나 공간의 한계로 ‘사용자가 가장 좋아할 것 같은’ 물건을 진열하고 서비스합니다. 하지만 온라인에서는 상황이 다릅니다. 모든 아이템의 진열과 서비스가 가능합니다. 신문지면상 인쇄되는 기사는 한정적이지만, 온라인 기사는 무제한으로 업로드가 가능합니다. 오프라인 매장에서 추천은 아주 간단합니다. 모든 고객에게 맞출 수 없으므로, 오직 추천은 총합 얼마만큼의 아이템을 전시할 수 있느냐에 의해 결정됩니다. 대체로 오프라인 서점에서는 가장 인기 많은 책을 진열하면 되고, 신문은 사람들이 좋아할 만한 기사를 선별해 인쇄하면 됩니다. 이럴수록 전시품목과 기사배열을 결정하는 큐레이터와 데스크의 역할이 중요하겠지요. 온라인 매장이 오프라인과 가장 다른 점은 바로 롱테일 법칙에 있습니다.  x축을 각 아이템, y축을 인기도로 봤을 때 나타나는 현상입니다. 보통은 ‘페레토 법칙’이라 하여 상위 20%의 아이템이 매출의 80%를 차지한다는 논리가 오프라인 매장의 아이템 선별에 중요한 척도가 되었죠. 하지만 온라인 매장에서는 긴 꼬리 모양의 하위 80% 아이템에 주목합니다. 개인별 선호에 따른 특수한 아이템이 존재하고, 이 부분에서 상당한 매출이 발생한다는 의미입니다. 롱테일 법칙을 설명하는 대표적인 예로 크리스 앤더슨의 ‘공허감과의 조우'(Touching the Void)라는 책이 자주 언급됩니다. 등산에 관한 이 책은 출판당시에는 판매량이 많지 않았지만, 수 년이 지난 후 ‘증발'(Into Thin Air)이라는 작품이 같은 주제에서 출판되자 아마존 추천 시스템이 몇몇의 사용자에게 크리스 앤더슨의 작품을 추천해 주었고 인기를 끌었답니다. 오프라인 매장에서는 있을 수 없는 일이지요. ## 추천 시스템의 응용 추천 시스템은 잘 알려진대로, * 온라인 상품 추천(아마존) * 영화 추천(넷플릭스) * 기타 콘텐츠 추천(유튜브) 등이 있습니다. 저는 콘텐츠 추천의 하나로 기사 및 상품 추천 시스템을 설계하고 있습니다. 사람이 직접 추천한 논문 목록과 과학분야 기반 사용자 클러스터링, 하이브리드 협업 필터링 등의 방법을 조합하여 구현하고 있습니다. 논문은 하루에 수 만개씩 쏟아질 정도로 빅데이터입니다. 최근 네이처-스프링거에서 [Recommended R](http://recommended.springernature.com/recommended/)이라는 서비스를 통해 논문 추천에 나서고 있습니다. 흔히 독자가 최근 본 100개의 논문을 토대로 여러 DB를 검색해 추천 점수를 만든 뒤 추천을 해주는 방식입니다. Reference [Stanford InfoLab – Recommendation Systems](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf) |
| json metadata | {"tags":["recommender","data-science","preference-matrix","algorithm"],"image":["https://steemitimages.com/DQmTj8C5czRao6RanXKZ8kmPzcBWtRBwBDzPZQoUCPhgrLg/image.png","https://steemitimages.com/DQmaXbZPtrN3y85522daoY1ZKSV3ZjSJ9KEeDxqJd7B1ECo/image.png"],"links":["http://recommended.springernature.com/recommended/","http://infolab.stanford.edu/~ullman/mmds/ch9.pdf"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 2lrvhy |
| title | 추천시스템 모델링 |
| Transaction Info | Block #20227386/Trx 58d6a8dcebb26d29009817ea09fc73cd07ea4850 |
View Raw JSON Data
{
"block": 20227386,
"op": [
"comment",
{
"author": "saemi32",
"body": "추천시스템의 모델은 ‘선호도 행렬’을 주로 사용합니다. 그리고 온라인 판매에서 중요한 역할을 하는 ‘롱테일’의 법칙을 다루어 보겠습니다.\n\n \n\n## 선호도 행렬\n추천 시스템에서 ‘사용자’와 ‘아이템’이 가장 중요한 요소라고 볼 수 있습니다. 사용자는 특정한 아이템에 대한 선호를 가지고 있고, 이들 두 요소는 행과 열로 하는 행렬로 표현됩니다. 각 엔트리를 이루는 값들은 순서집합(ordered set)으로 주어지는데요. 값이 사용자가 평가한 아이템의 평점의 크기를 의미하기 때문입니다.\n\n선호도 행렬은 대체로 희소행렬(sparse matrix)라는 가정이 주어집니다. 희소행렬은 대부분 행렬의 값이 ‘알 수 없음'(unknown) 상태인 것을 의미합니다. 사용자가 매우 많고, 사용자가 좋아하는 아이템은 임의의 그룹별로 정해져 있기 때문입니다. 저희 시스템에서도 수없이 많은 논문이 언급되지만, 생물정보학을 전공하는 사람이 물리학의 논문을 평가했을 가능성이 매우 희박합니다. 희소행렬 속 ‘알 수 없음’ 값은 추천 시스템이 특정 사용자의 특정 아이템에 대한 선호를 명시적으로 알 수 없을 때를 가리킵니다.\n\n교재의 예시를 살펴보겠습니다.\n\n\n\n선호도 행렬입니다. A~D의 사용자가 HP1~HP3, TW, SW1~SW3까지 영화에 1~5점까지 점수를 주었습니다. 다수의 빈 칸을 발견할 수 있는 희소행렬입니다.\n\n추천 시스템의 목적은 바로 이 빈 칸의 값을 예측하여 채워 넣는 것입니다. 아마 영화의 제작사, 배급사, 출연자나 이름의 비슷한 정도 등으로 대강의 유사성을 알 수 있습니다. 예측컨대, A 사용자는 SW2나 SW3을 좋아하지 않을 것입니다. SW1을 한 번 봤는데 1점 줬다면, 그 시리즈물을 좋아할 리 없습니다. C 사용자가 SW1, SW2에 비슷한 점수를 준 것을 보면 알 수 있지요.\n\n아마 추천 시스템마다 조금씩 사용목적은 다르겠지만, 선호도 행렬의 모든 빈칸을 채워넣는 과정이 필수입니다. 그리고 한 행 안에서 예측된 점수 중 가장 높은 점수를 찾아봐야합니다. 사용자마다 개인화된 추천을 해 줄 예정이니까요. 대부분 응용 시스템에서는 모든 아이템에 대한 사용자별 선호도를 제시하기보다 좋아할 몇몇 개의 아이템을 제시합니다. 따라서 높은 점수가 예상되는 모든 아이템에 대한 계산을 수행하기보다 적절한 부분집합을 먼저 찾는 것이 합리적일 것입니다.\n\n+ 선호도 행렬을 만드는 방법은 두 가지 입니다. 첫째, 개별 사용자가 평점을 매기도록 유도하는 것. 둘째, 사용자의 행위를 저장하는 것입니다. 첫번째 방법은 효율성에 문제가 있습니다. 대부분의 사용자는 평점 매기기를 귀찮아할테지요. 넷플릭스, 유튜브 등이 평점 시스템을 도입하고 있습니다. 반면 아마존과 유튜브(또 등장;;)는 사용자가 ‘like’를 누르는 행위를 1로 지정해 저장합니다. 이럴 경우 0과 1만 존재해 아이템의 선호도를 평가하기가 어렵게 됩니다. 적합한 상황을 선택하여 선호도 행렬 만드는 방법을 결정해야할 것입니다.\n\n \n\n## 롱테일 법칙\n추천 시스템을 만들기 전에 ‘롱테일 법칙'(long-tail phenomenon)을 알아보도록 합니다. 오프라인 배달이나 상점에서는 자원이나 공간의 한계로 ‘사용자가 가장 좋아할 것 같은’ 물건을 진열하고 서비스합니다. 하지만 온라인에서는 상황이 다릅니다. 모든 아이템의 진열과 서비스가 가능합니다. 신문지면상 인쇄되는 기사는 한정적이지만, 온라인 기사는 무제한으로 업로드가 가능합니다.\n\n오프라인 매장에서 추천은 아주 간단합니다. 모든 고객에게 맞출 수 없으므로, 오직 추천은 총합 얼마만큼의 아이템을 전시할 수 있느냐에 의해 결정됩니다. 대체로 오프라인 서점에서는 가장 인기 많은 책을 진열하면 되고, 신문은 사람들이 좋아할 만한 기사를 선별해 인쇄하면 됩니다. 이럴수록 전시품목과 기사배열을 결정하는 큐레이터와 데스크의 역할이 중요하겠지요.\n\n온라인 매장이 오프라인과 가장 다른 점은 바로 롱테일 법칙에 있습니다.\n\n\n\nx축을 각 아이템, y축을 인기도로 봤을 때 나타나는 현상입니다. 보통은 ‘페레토 법칙’이라 하여 상위 20%의 아이템이 매출의 80%를 차지한다는 논리가 오프라인 매장의 아이템 선별에 중요한 척도가 되었죠. 하지만 온라인 매장에서는 긴 꼬리 모양의 하위 80% 아이템에 주목합니다. 개인별 선호에 따른 특수한 아이템이 존재하고, 이 부분에서 상당한 매출이 발생한다는 의미입니다.\n\n롱테일 법칙을 설명하는 대표적인 예로 크리스 앤더슨의 ‘공허감과의 조우'(Touching the Void)라는 책이 자주 언급됩니다. 등산에 관한 이 책은 출판당시에는 판매량이 많지 않았지만, 수 년이 지난 후 ‘증발'(Into Thin Air)이라는 작품이 같은 주제에서 출판되자 아마존 추천 시스템이 몇몇의 사용자에게 크리스 앤더슨의 작품을 추천해 주었고 인기를 끌었답니다. 오프라인 매장에서는 있을 수 없는 일이지요.\n\n \n\n## 추천 시스템의 응용\n\n추천 시스템은 잘 알려진대로,\n\n* 온라인 상품 추천(아마존)\n* 영화 추천(넷플릭스)\n* 기타 콘텐츠 추천(유튜브)\n\n등이 있습니다. 저는 콘텐츠 추천의 하나로 기사 및 상품 추천 시스템을 설계하고 있습니다. 사람이 직접 추천한 논문 목록과 과학분야 기반 사용자 클러스터링, 하이브리드 협업 필터링 등의 방법을 조합하여 구현하고 있습니다. 논문은 하루에 수 만개씩 쏟아질 정도로 빅데이터입니다. 최근 네이처-스프링거에서 [Recommended R](http://recommended.springernature.com/recommended/)이라는 서비스를 통해 논문 추천에 나서고 있습니다. 흔히 독자가 최근 본 100개의 논문을 토대로 여러 DB를 검색해 추천 점수를 만든 뒤 추천을 해주는 방식입니다.\n\n \n\nReference\n\n[Stanford InfoLab – Recommendation Systems](http://infolab.stanford.edu/~ullman/mmds/ch9.pdf)",
"json_metadata": "{\"tags\":[\"recommender\",\"data-science\",\"preference-matrix\",\"algorithm\"],\"image\":[\"https://steemitimages.com/DQmTj8C5czRao6RanXKZ8kmPzcBWtRBwBDzPZQoUCPhgrLg/image.png\",\"https://steemitimages.com/DQmaXbZPtrN3y85522daoY1ZKSV3ZjSJ9KEeDxqJd7B1ECo/image.png\"],\"links\":[\"http://recommended.springernature.com/recommended/\",\"http://infolab.stanford.edu/~ullman/mmds/ch9.pdf\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "2lrvhy",
"title": "추천시스템 모델링"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T04:56:39",
"trx_id": "58d6a8dcebb26d29009817ea09fc73cd07ea4850",
"trx_in_block": 1,
"virtual_op": 0
}steem-networkreplied to @saemi32 / re-4zjajb-20180227t0325162018/02/27 03:25:18
steem-networkreplied to @saemi32 / re-4zjajb-20180227t032516
2018/02/27 03:25:18
| author | steem-network |
| body | <html> <p>Congratulations <a href="/@saemi32" target="_blank">@saemi32</a>, you have decided to take the next big step with your first post! The Steem Network Team wishes you a great time among this awesome community.</p> <hr> <div class="pull-left"><img src="https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif" alt="Thumbs up for Steem Network´s strategy" title="I suggest Steem Network´s strategy" width="320" height="222"></div> <h1>The proven road to boost your personal success in this amazing Steem Network</h1> <p>Do you already know that awesome content will get great profits by following these <a href="/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26" target="_blank" alt="Steem Network" title="Follow Steem Network´s suggestions to boost your success">simple steps</a>, that have been worked out by experts?</p> </html> |
| json metadata | {"tags": ["steem-network"], "users": ["steem-network", "saemi32"], "image": ["https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif"], "links": ["/@saemi32", "/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26"], "community": "steem-network", "app": "steem-network/1.0.1", "format": "html"} |
| parent author | saemi32 |
| parent permlink | 4zjajb |
| permlink | re-4zjajb-20180227t032516 |
| title | |
| Transaction Info | Block #20225647/Trx a9be432b88258a66cdfe43185ce75f9a7cc65cfc |
View Raw JSON Data
{
"block": 20225647,
"op": [
"comment",
{
"author": "steem-network",
"body": "<html>\n<p>Congratulations <a href=\"/@saemi32\" target=\"_blank\">@saemi32</a>, you have decided to take the next big step with your first post! The Steem Network Team wishes you a great time among this awesome community.</p>\n<hr>\n<div class=\"pull-left\"><img src=\"https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif\" alt=\"Thumbs up for Steem Network´s strategy\" title=\"I suggest Steem Network´s strategy\" width=\"320\" height=\"222\"></div>\n<h1>The proven road to boost your personal success in this amazing Steem Network</h1>\n<p>Do you already know that awesome content will get great profits by following these <a href=\"/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26\" target=\"_blank\" alt=\"Steem Network\" title=\"Follow Steem Network´s suggestions to boost your success\">simple steps</a>, that have been worked out by experts?</p>\n</html>",
"json_metadata": "{\"tags\": [\"steem-network\"], \"users\": [\"steem-network\", \"saemi32\"], \"image\": [\"https://steemitimages.com/DQmaAdLUJ3yaSkmcmWECWyPGPWcjfbCoZ8Tu4RM6H4DbjCi/steem-network-thumbs-up.gif\"], \"links\": [\"/@saemi32\", \"/steem-network/@steem-network/spread-your-posts-through-this-proven-strategy-and-get-great-profits-in-return--for-posts-created-at-2018-02-26\"], \"community\": \"steem-network\", \"app\": \"steem-network/1.0.1\", \"format\": \"html\"}",
"parent_author": "saemi32",
"parent_permlink": "4zjajb",
"permlink": "re-4zjajb-20180227t032516",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-02-27T03:25:18",
"trx_id": "a9be432b88258a66cdfe43185ce75f9a7cc65cfc",
"trx_in_block": 21,
"virtual_op": 0
}2018/02/26 10:32:12
2018/02/26 10:32:12
| author | saemi32 |
| body | > 안녕하세요? 새로 스팀잇에 진입한 **샘이**입니다. 앞으로 과학기술과 미디어 분야에서 범과학, 콘텐츠 관련 추천 알고리즘, 블록체인, 이들에 대한 애플리케이션, 사회적 논의 등에 대해 폭넓게 다루겠습니다. 많은 관심 부탁드려요! 첫번째 시리즈는 스탠포드 텍스트를 기본으로 추천 시스템을 소화하며 작성해 보았습니다. --- ## 협업 필터링 협업 필터링(CF, Collaborative Filtering)과 협업 필터링을 활용한 각종 기법은 현재 추천 알고리즘에서 가장 보편적으로 쓰이고 있습니다. 데이터 과학을 시작할 때 쉽게 접하는 영화평점 데이터를 활용한 개인별 영화추천 시스템에도 협업 필터링이 쓰이지요. 우리가 어떤 것을 사용자에게 추천할 때, 가장 합리적인 방법은 우선 비슷한 관심사의 사람들을 찾고, 행동을 분석하여, 같은 상품을 추천해 주는 것입니다. 혹은 사용자가 이전에 구입한 상품과 비슷한 것을 추천하는 것도 또다른 방법입니다. 협업 필터링에는 대표적으로 **사용자 기반(user-based)** 협업 필터링과 **아이템 기반(item-based)** 협업 필터링이 있습니다. 협업 필터링을 이용한 각각의 사례는 다음의 두 단계를 따릅니다. ##### 사용자 기반 협업 필터링 --> 데이터가 적고 변경이 자주 일어나는 경우, 실시간으로 유사도를 계산. * 각 사용자에 대해, 아이템별 선호도(ex. 영화 평점)를 조사한다. * 각 사용자 사이의 유사도(ex. 사용자-평점 matrix에서 코사인거리, 유클리디안거리, 피어슨상관계수 등)를 계산한다. * 가장 유사한 사람이 가장 선호하는 아이템을 추천한다 / 추천가능한 아이템에 대하여 모든 사용자의 선호도 합으로 나누어 정규화한 뒤 추천한다. ##### 아이템 기반 협업 필터링 --> 데이터가 방대하고 변경이 자주 일어나지 않는 경우. 유사도를 저장하여 사용. * 각 아이템별 사용자의 선호도를 조사한다. * 아이템별 유사도를 계산하고 저장한다. * 추천가능한 아이템 중 가장 유사한 아이템을 추천한다. --- ## 추천을 위한 행렬 분해 다음으로 살펴볼 방법은 행렬 분해(Matrix Decomposition)입니다. 이 방법을 사용하면 행과 열에 어떤 아이템이 남아야 하는지 고민할 필요가 없어 매우 유용합니다. u라는 벡터를 사용자의 선호도, v라는 벡터를 영화와 관련된 파라미터로 정의해 봅시다. 이런 경우 i번째 사용자부터 j번째 영화까지 추천 등급인 xij를를 u와 v의 내적으로 근사할 수 있습니다. 이미 알고있는 사용자 유사도와 선호도 점수로부터 아직 모르는 추천 등급을 예측할 수 있습니다.  그림의 출처는 [이곳](https://www.packtpub.com/books/content/building-recommendation-engine-spark)입니다. 예시입니다. User와 Item 벡터곱으로 Ted가 아직 보지 않은 A아이템을 2.68만큼 선호할 것이라는 예측을 할 수 있습니다. --- ## 군집화(Clustering) 이전까지 다뤄본 방법들은 지도학습(Supervised Learning)에 해당하는 문제로 대체로 단순한 시스템에서 적용될 수 있습니다. 그렇다면 비지도학습을 추천시스템에 적용하면 어떻게 될까요? 만약 아주 큰 추천 시스템을 기획중일 때 가장 먼저 고려할 방법은 군집화(Clustering)입니다. 이전 사용자의 평점과 같은 정보가 충분하지 않는 상황이라면요. 데이터가 너무 많다면, 협업 필터링을 하기 앞서 군집화를 통해서 관련 사용자 이웃을 줄이는 방법입니다. 군집화를 통해 유사한 사용자 그룹(클러스터)을 만들고 클러스터 레벨에서 연산된 아이템을 추천받게 됩니다. 이후엔 각 방법에 대한 동작 및 구현에 대한 자세한 내용을 포스팅하도록 하겠습니다. Reference [Building a Recommendation Engine with Spark](https://www.packtpub.com/books/content/building-recommendation-engine-spark) [R로 만드는 추천시스템](https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k) |
| json metadata | {"tags":["science","technology","recommender","data-science","collaborative-filtering"],"image":["https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png"],"links":["https://www.packtpub.com/books/content/building-recommendation-engine-spark","https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 4zjajb |
| title | 추천 시스템에 쓰이는 알고리즘 개요 |
| Transaction Info | Block #20205446/Trx fd35aa527d85267771e0a054d1eac1d4f58ed086 |
View Raw JSON Data
{
"block": 20205446,
"op": [
"comment",
{
"author": "saemi32",
"body": "> 안녕하세요?\n새로 스팀잇에 진입한 **샘이**입니다. 앞으로 과학기술과 미디어 분야에서 범과학, 콘텐츠 관련 추천 알고리즘, 블록체인, 이들에 대한 애플리케이션, 사회적 논의 등에 대해 폭넓게 다루겠습니다. 많은 관심 부탁드려요! 첫번째 시리즈는 스탠포드 텍스트를 기본으로 추천 시스템을 소화하며 작성해 보았습니다.\n\n\n\n---\n## 협업 필터링\n\n협업 필터링(CF, Collaborative Filtering)과 협업 필터링을 활용한 각종 기법은 현재 추천 알고리즘에서 가장 보편적으로 쓰이고 있습니다. 데이터 과학을 시작할 때 쉽게 접하는 영화평점 데이터를 활용한 개인별 영화추천 시스템에도 협업 필터링이 쓰이지요. 우리가 어떤 것을 사용자에게 추천할 때, 가장 합리적인 방법은 우선 비슷한 관심사의 사람들을 찾고, 행동을 분석하여, 같은 상품을 추천해 주는 것입니다. 혹은 사용자가 이전에 구입한 상품과 비슷한 것을 추천하는 것도 또다른 방법입니다. \n\n협업 필터링에는 대표적으로 **사용자 기반(user-based)** 협업 필터링과 **아이템 기반(item-based)** 협업 필터링이 있습니다. 협업 필터링을 이용한 각각의 사례는 다음의 두 단계를 따릅니다.\n\n\n\n##### 사용자 기반 협업 필터링 --> 데이터가 적고 변경이 자주 일어나는 경우, 실시간으로 유사도를 계산.\n\n* 각 사용자에 대해, 아이템별 선호도(ex. 영화 평점)를 조사한다.\n* 각 사용자 사이의 유사도(ex. 사용자-평점 matrix에서 코사인거리, 유클리디안거리, 피어슨상관계수 등)를 계산한다.\n* 가장 유사한 사람이 가장 선호하는 아이템을 추천한다 / 추천가능한 아이템에 대하여 모든 사용자의 선호도 합으로 나누어 정규화한 뒤 추천한다.\n\n\n##### 아이템 기반 협업 필터링 --> 데이터가 방대하고 변경이 자주 일어나지 않는 경우. 유사도를 저장하여 사용.\n\n* 각 아이템별 사용자의 선호도를 조사한다.\n* 아이템별 유사도를 계산하고 저장한다.\n* 추천가능한 아이템 중 가장 유사한 아이템을 추천한다.\n\n---\n## 추천을 위한 행렬 분해\n다음으로 살펴볼 방법은 행렬 분해(Matrix Decomposition)입니다. 이 방법을 사용하면 행과 열에 어떤 아이템이 남아야 하는지 고민할 필요가 없어 매우 유용합니다. u라는 벡터를 사용자의 선호도, v라는 벡터를 영화와 관련된 파라미터로 정의해 봅시다.\n\n이런 경우 i번째 사용자부터 j번째 영화까지 추천 등급인 xij를를 u와 v의 내적으로 근사할 수 있습니다. 이미 알고있는 사용자 유사도와 선호도 점수로부터 아직 모르는 추천 등급을 예측할 수 있습니다.\n\n\n\n\n그림의 출처는 [이곳](https://www.packtpub.com/books/content/building-recommendation-engine-spark)입니다. 예시입니다. User와 Item 벡터곱으로 Ted가 아직 보지 않은 A아이템을 2.68만큼 선호할 것이라는 예측을 할 수 있습니다.\n\n\n---\n## 군집화(Clustering)\n이전까지 다뤄본 방법들은 지도학습(Supervised Learning)에 해당하는 문제로 대체로 단순한 시스템에서 적용될 수 있습니다. 그렇다면 비지도학습을 추천시스템에 적용하면 어떻게 될까요? 만약 아주 큰 추천 시스템을 기획중일 때 가장 먼저 고려할 방법은 군집화(Clustering)입니다. 이전 사용자의 평점과 같은 정보가 충분하지 않는 상황이라면요.\n\n데이터가 너무 많다면, 협업 필터링을 하기 앞서 군집화를 통해서 관련 사용자 이웃을 줄이는 방법입니다. 군집화를 통해 유사한 사용자 그룹(클러스터)을 만들고 클러스터 레벨에서 연산된 아이템을 추천받게 됩니다.\n\n\n\n\n\n이후엔 각 방법에 대한 동작 및 구현에 대한 자세한 내용을 포스팅하도록 하겠습니다.\n\n\n\nReference\n\n[Building a Recommendation Engine with Spark](https://www.packtpub.com/books/content/building-recommendation-engine-spark)\n[R로 만드는 추천시스템](https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k)",
"json_metadata": "{\"tags\":[\"science\",\"technology\",\"recommender\",\"data-science\",\"collaborative-filtering\"],\"image\":[\"https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png\"],\"links\":[\"https://www.packtpub.com/books/content/building-recommendation-engine-spark\",\"https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "4zjajb",
"title": "추천 시스템에 쓰이는 알고리즘 개요"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T10:32:12",
"trx_id": "fd35aa527d85267771e0a054d1eac1d4f58ed086",
"trx_in_block": 34,
"virtual_op": 0
}2018/02/26 09:24:03
2018/02/26 09:24:03
| author | saemi32 |
| body | @@ -51,13 +51,16 @@ %EB%B2%94%EA%B3%BC%ED%95%99 - %EC%9D%B4%EC%95%BC%EA%B8%B0, +, %EC%BD%98%ED%85%90%EC%B8%A0 %EA%B4%80%EB%A0%A8 %EC%B6%94%EC%B2%9C @@ -491,16 +491,18 @@ %EB%8A%94 %EB%8C%80%ED%91%9C%EC%A0%81%EC%9C%BC%EB%A1%9C +** %EC%82%AC%EC%9A%A9%EC%9E%90 %EA%B8%B0%EB%B0%98(u @@ -507,24 +507,26 @@ (user-based) +** %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81%EA%B3%BC %EC%95%84%EC%9D%B4%ED%85%9C @@ -522,16 +522,18 @@ %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81%EA%B3%BC +** %EC%95%84%EC%9D%B4%ED%85%9C %EA%B8%B0%EB%B0%98(i @@ -542,16 +542,18 @@ m-based) +** %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81%EC%9D%B4 |
| json metadata | {"tags":["recommender","science","technology","data-science","collaborative-filtering"],"image":["https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png"],"links":["https://www.packtpub.com/books/content/building-recommendation-engine-spark","https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 4zjajb |
| title | 추천 시스템에 쓰이는 알고리즘 개요 |
| Transaction Info | Block #20204083/Trx 12abf29f787d3a711726d761fe41025cd94f2956 |
View Raw JSON Data
{
"block": 20204083,
"op": [
"comment",
{
"author": "saemi32",
"body": "@@ -51,13 +51,16 @@\n %EB%B2%94%EA%B3%BC%ED%95%99\n- %EC%9D%B4%EC%95%BC%EA%B8%B0,\n+, %EC%BD%98%ED%85%90%EC%B8%A0 %EA%B4%80%EB%A0%A8\n %EC%B6%94%EC%B2%9C \n@@ -491,16 +491,18 @@\n %EB%8A%94 %EB%8C%80%ED%91%9C%EC%A0%81%EC%9C%BC%EB%A1%9C \n+**\n %EC%82%AC%EC%9A%A9%EC%9E%90 %EA%B8%B0%EB%B0%98(u\n@@ -507,24 +507,26 @@\n (user-based)\n+**\n %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81%EA%B3%BC %EC%95%84%EC%9D%B4%ED%85%9C\n@@ -522,16 +522,18 @@\n %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81%EA%B3%BC \n+**\n %EC%95%84%EC%9D%B4%ED%85%9C %EA%B8%B0%EB%B0%98(i\n@@ -542,16 +542,18 @@\n m-based)\n+**\n %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81%EC%9D%B4\n",
"json_metadata": "{\"tags\":[\"recommender\",\"science\",\"technology\",\"data-science\",\"collaborative-filtering\"],\"image\":[\"https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png\"],\"links\":[\"https://www.packtpub.com/books/content/building-recommendation-engine-spark\",\"https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "4zjajb",
"title": "추천 시스템에 쓰이는 알고리즘 개요"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T09:24:03",
"trx_id": "12abf29f787d3a711726d761fe41025cd94f2956",
"trx_in_block": 34,
"virtual_op": 0
}2018/02/26 09:20:27
2018/02/26 09:20:27
| author | saemi32 |
| body | @@ -1,8 +1,191 @@ +%3E %EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94?%0A%EC%83%88%EB%A1%9C %EC%8A%A4%ED%8C%80%EC%9E%87%EC%97%90 %EC%A7%84%EC%9E%85%ED%95%9C **%EC%83%98%EC%9D%B4**%EC%9E%85%EB%8B%88%EB%8B%A4. %EC%95%9E%EC%9C%BC%EB%A1%9C %EA%B3%BC%ED%95%99%EA%B8%B0%EC%88%A0%EA%B3%BC %EB%AF%B8%EB%94%94%EC%96%B4 %EB%B6%84%EC%95%BC%EC%97%90%EC%84%9C %EB%B2%94%EA%B3%BC%ED%95%99 %EC%9D%B4%EC%95%BC%EA%B8%B0, %EC%B6%94%EC%B2%9C %EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98, %EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8, %EC%9D%B4%EB%93%A4%EC%97%90 %EB%8C%80%ED%95%9C %EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98, %EC%82%AC%ED%9A%8C%EC%A0%81 %EB%85%BC%EC%9D%98 %EB%93%B1%EC%97%90 %EB%8C%80%ED%95%B4 %ED%8F%AD%EB%84%93%EA%B2%8C %EB%8B%A4%EB%A3%A8%EA%B2%A0%EC%8A%B5%EB%8B%88%EB%8B%A4. %EB%A7%8E%EC%9D%80 %EA%B4%80%EC%8B%AC %EB%B6%80%ED%83%81%EB%93%9C%EB%A0%A4%EC%9A%94! %EC%B2%AB%EB%B2%88%EC%A7%B8 %EC%8B%9C%EB%A6%AC%EC%A6%88%EB%8A%94 %EC%8A%A4%ED%83%A0%ED%8F%AC%EB%93%9C %ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC %EA%B8%B0%EB%B3%B8%EC%9C%BC%EB%A1%9C %EC%B6%94%EC%B2%9C %EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84 %EC%86%8C%ED%99%94%ED%95%98%EB%A9%B0 %EC%9E%91%EC%84%B1%ED%95%B4 %EB%B3%B4%EC%95%98%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%0A%0A%0A---%0A ## %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0 @@ -470,16 +470,17 @@ %EB%A5%B8 %EB%B0%A9%EB%B2%95%EC%9E%85%EB%8B%88%EB%8B%A4. + %0A%0A%ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81 @@ -585,16 +585,18 @@ %EB%94%B0%EB%A6%85%EB%8B%88%EB%8B%A4.%0A%0A +%0A%0A ##### %EC%82%AC%EC%9A%A9 @@ -993,16 +993,19 @@ %EC%B6%94%EC%B2%9C%ED%95%9C%EB%8B%A4.%0A%0A - +--- %0A## %EC%B6%94%EC%B2%9C%EC%9D%84 @@ -1542,15 +1542,30 @@ .%0A%0A%0A +--- %0A## %EA%B5%B0%EC%A7%91%ED%99%94 +(Clustering) %0A%EC%9D%B4%EC%A0%84%EA%B9%8C |
| json metadata | {"tags":["science","technology","recommender","data-science","collaborative-filtering"],"image":["https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png"],"links":["https://www.packtpub.com/books/content/building-recommendation-engine-spark","https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 4zjajb |
| title | 추천 시스템에 쓰이는 알고리즘 개요 |
| Transaction Info | Block #20204011/Trx abc79bd781de58c3361e53e552aafd1e6b06cd3d |
View Raw JSON Data
{
"block": 20204011,
"op": [
"comment",
{
"author": "saemi32",
"body": "@@ -1,8 +1,191 @@\n+%3E %EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94?%0A%EC%83%88%EB%A1%9C %EC%8A%A4%ED%8C%80%EC%9E%87%EC%97%90 %EC%A7%84%EC%9E%85%ED%95%9C **%EC%83%98%EC%9D%B4**%EC%9E%85%EB%8B%88%EB%8B%A4. %EC%95%9E%EC%9C%BC%EB%A1%9C %EA%B3%BC%ED%95%99%EA%B8%B0%EC%88%A0%EA%B3%BC %EB%AF%B8%EB%94%94%EC%96%B4 %EB%B6%84%EC%95%BC%EC%97%90%EC%84%9C %EB%B2%94%EA%B3%BC%ED%95%99 %EC%9D%B4%EC%95%BC%EA%B8%B0, %EC%B6%94%EC%B2%9C %EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98, %EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8, %EC%9D%B4%EB%93%A4%EC%97%90 %EB%8C%80%ED%95%9C %EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98, %EC%82%AC%ED%9A%8C%EC%A0%81 %EB%85%BC%EC%9D%98 %EB%93%B1%EC%97%90 %EB%8C%80%ED%95%B4 %ED%8F%AD%EB%84%93%EA%B2%8C %EB%8B%A4%EB%A3%A8%EA%B2%A0%EC%8A%B5%EB%8B%88%EB%8B%A4. %EB%A7%8E%EC%9D%80 %EA%B4%80%EC%8B%AC %EB%B6%80%ED%83%81%EB%93%9C%EB%A0%A4%EC%9A%94! %EC%B2%AB%EB%B2%88%EC%A7%B8 %EC%8B%9C%EB%A6%AC%EC%A6%88%EB%8A%94 %EC%8A%A4%ED%83%A0%ED%8F%AC%EB%93%9C %ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC %EA%B8%B0%EB%B3%B8%EC%9C%BC%EB%A1%9C %EC%B6%94%EC%B2%9C %EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84 %EC%86%8C%ED%99%94%ED%95%98%EB%A9%B0 %EC%9E%91%EC%84%B1%ED%95%B4 %EB%B3%B4%EC%95%98%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%0A%0A%0A---%0A\n ## %ED%98%91%EC%97%85 %ED%95%84%ED%84%B0\n@@ -470,16 +470,17 @@\n %EB%A5%B8 %EB%B0%A9%EB%B2%95%EC%9E%85%EB%8B%88%EB%8B%A4.\n+ \n %0A%0A%ED%98%91%EC%97%85 %ED%95%84%ED%84%B0%EB%A7%81\n@@ -585,16 +585,18 @@\n %EB%94%B0%EB%A6%85%EB%8B%88%EB%8B%A4.%0A%0A\n+%0A%0A\n ##### %EC%82%AC%EC%9A%A9\n@@ -993,16 +993,19 @@\n %EC%B6%94%EC%B2%9C%ED%95%9C%EB%8B%A4.%0A%0A\n-\n \n+---\n %0A## %EC%B6%94%EC%B2%9C%EC%9D%84 \n@@ -1542,15 +1542,30 @@\n .%0A%0A%0A\n+---\n %0A## %EA%B5%B0%EC%A7%91%ED%99%94\n+(Clustering)\n %0A%EC%9D%B4%EC%A0%84%EA%B9%8C\n",
"json_metadata": "{\"tags\":[\"science\",\"technology\",\"recommender\",\"data-science\",\"collaborative-filtering\"],\"image\":[\"https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png\"],\"links\":[\"https://www.packtpub.com/books/content/building-recommendation-engine-spark\",\"https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "4zjajb",
"title": "추천 시스템에 쓰이는 알고리즘 개요"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T09:20:27",
"trx_id": "abc79bd781de58c3361e53e552aafd1e6b06cd3d",
"trx_in_block": 7,
"virtual_op": 0
}2018/02/26 09:08:06
2018/02/26 09:08:06
| author | saemi32 |
| permlink | 4zjajb |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20203764/Trx 8d301672d3dda6814d6674cbf65f88dd66082277 |
View Raw JSON Data
{
"block": 20203764,
"op": [
"vote",
{
"author": "saemi32",
"permlink": "4zjajb",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T09:08:06",
"trx_id": "8d301672d3dda6814d6674cbf65f88dd66082277",
"trx_in_block": 14,
"virtual_op": 0
}2018/02/26 09:08:06
2018/02/26 09:08:06
| author | saemi32 |
| body | ## 협업 필터링 협업 필터링(CF, Collaborative Filtering)과 협업 필터링을 활용한 각종 기법은 현재 추천 알고리즘에서 가장 보편적으로 쓰이고 있습니다. 데이터 과학을 시작할 때 쉽게 접하는 영화평점 데이터를 활용한 개인별 영화추천 시스템에도 협업 필터링이 쓰이지요. 우리가 어떤 것을 사용자에게 추천할 때, 가장 합리적인 방법은 우선 비슷한 관심사의 사람들을 찾고, 행동을 분석하여, 같은 상품을 추천해 주는 것입니다. 혹은 사용자가 이전에 구입한 상품과 비슷한 것을 추천하는 것도 또다른 방법입니다. 협업 필터링에는 대표적으로 사용자 기반(user-based) 협업 필터링과 아이템 기반(item-based) 협업 필터링이 있습니다. 협업 필터링을 이용한 각각의 사례는 다음의 두 단계를 따릅니다. ##### 사용자 기반 협업 필터링 --> 데이터가 적고 변경이 자주 일어나는 경우, 실시간으로 유사도를 계산. * 각 사용자에 대해, 아이템별 선호도(ex. 영화 평점)를 조사한다. * 각 사용자 사이의 유사도(ex. 사용자-평점 matrix에서 코사인거리, 유클리디안거리, 피어슨상관계수 등)를 계산한다. * 가장 유사한 사람이 가장 선호하는 아이템을 추천한다 / 추천가능한 아이템에 대하여 모든 사용자의 선호도 합으로 나누어 정규화한 뒤 추천한다. ##### 아이템 기반 협업 필터링 --> 데이터가 방대하고 변경이 자주 일어나지 않는 경우. 유사도를 저장하여 사용. * 각 아이템별 사용자의 선호도를 조사한다. * 아이템별 유사도를 계산하고 저장한다. * 추천가능한 아이템 중 가장 유사한 아이템을 추천한다. ## 추천을 위한 행렬 분해 다음으로 살펴볼 방법은 행렬 분해(Matrix Decomposition)입니다. 이 방법을 사용하면 행과 열에 어떤 아이템이 남아야 하는지 고민할 필요가 없어 매우 유용합니다. u라는 벡터를 사용자의 선호도, v라는 벡터를 영화와 관련된 파라미터로 정의해 봅시다. 이런 경우 i번째 사용자부터 j번째 영화까지 추천 등급인 xij를를 u와 v의 내적으로 근사할 수 있습니다. 이미 알고있는 사용자 유사도와 선호도 점수로부터 아직 모르는 추천 등급을 예측할 수 있습니다.  그림의 출처는 [이곳](https://www.packtpub.com/books/content/building-recommendation-engine-spark)입니다. 예시입니다. User와 Item 벡터곱으로 Ted가 아직 보지 않은 A아이템을 2.68만큼 선호할 것이라는 예측을 할 수 있습니다. ## 군집화 이전까지 다뤄본 방법들은 지도학습(Supervised Learning)에 해당하는 문제로 대체로 단순한 시스템에서 적용될 수 있습니다. 그렇다면 비지도학습을 추천시스템에 적용하면 어떻게 될까요? 만약 아주 큰 추천 시스템을 기획중일 때 가장 먼저 고려할 방법은 군집화(Clustering)입니다. 이전 사용자의 평점과 같은 정보가 충분하지 않는 상황이라면요. 데이터가 너무 많다면, 협업 필터링을 하기 앞서 군집화를 통해서 관련 사용자 이웃을 줄이는 방법입니다. 군집화를 통해 유사한 사용자 그룹(클러스터)을 만들고 클러스터 레벨에서 연산된 아이템을 추천받게 됩니다. 이후엔 각 방법에 대한 동작 및 구현에 대한 자세한 내용을 포스팅하도록 하겠습니다. Reference [Building a Recommendation Engine with Spark](https://www.packtpub.com/books/content/building-recommendation-engine-spark) [R로 만드는 추천시스템](https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k) |
| json metadata | {"tags":["recommender","data-science","collaborative-filtering"],"image":["https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png"],"links":["https://www.packtpub.com/books/content/building-recommendation-engine-spark","https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | recommender |
| permlink | 4zjajb |
| title | 추천 시스템에 쓰이는 알고리즘 개요 |
| Transaction Info | Block #20203764/Trx 8d301672d3dda6814d6674cbf65f88dd66082277 |
View Raw JSON Data
{
"block": 20203764,
"op": [
"comment",
{
"author": "saemi32",
"body": "## 협업 필터링\n\n협업 필터링(CF, Collaborative Filtering)과 협업 필터링을 활용한 각종 기법은 현재 추천 알고리즘에서 가장 보편적으로 쓰이고 있습니다. 데이터 과학을 시작할 때 쉽게 접하는 영화평점 데이터를 활용한 개인별 영화추천 시스템에도 협업 필터링이 쓰이지요. 우리가 어떤 것을 사용자에게 추천할 때, 가장 합리적인 방법은 우선 비슷한 관심사의 사람들을 찾고, 행동을 분석하여, 같은 상품을 추천해 주는 것입니다. 혹은 사용자가 이전에 구입한 상품과 비슷한 것을 추천하는 것도 또다른 방법입니다.\n\n협업 필터링에는 대표적으로 사용자 기반(user-based) 협업 필터링과 아이템 기반(item-based) 협업 필터링이 있습니다. 협업 필터링을 이용한 각각의 사례는 다음의 두 단계를 따릅니다.\n\n##### 사용자 기반 협업 필터링 --> 데이터가 적고 변경이 자주 일어나는 경우, 실시간으로 유사도를 계산.\n\n* 각 사용자에 대해, 아이템별 선호도(ex. 영화 평점)를 조사한다.\n* 각 사용자 사이의 유사도(ex. 사용자-평점 matrix에서 코사인거리, 유클리디안거리, 피어슨상관계수 등)를 계산한다.\n* 가장 유사한 사람이 가장 선호하는 아이템을 추천한다 / 추천가능한 아이템에 대하여 모든 사용자의 선호도 합으로 나누어 정규화한 뒤 추천한다.\n\n\n##### 아이템 기반 협업 필터링 --> 데이터가 방대하고 변경이 자주 일어나지 않는 경우. 유사도를 저장하여 사용.\n\n* 각 아이템별 사용자의 선호도를 조사한다.\n* 아이템별 유사도를 계산하고 저장한다.\n* 추천가능한 아이템 중 가장 유사한 아이템을 추천한다.\n\n\n## 추천을 위한 행렬 분해\n다음으로 살펴볼 방법은 행렬 분해(Matrix Decomposition)입니다. 이 방법을 사용하면 행과 열에 어떤 아이템이 남아야 하는지 고민할 필요가 없어 매우 유용합니다. u라는 벡터를 사용자의 선호도, v라는 벡터를 영화와 관련된 파라미터로 정의해 봅시다.\n\n이런 경우 i번째 사용자부터 j번째 영화까지 추천 등급인 xij를를 u와 v의 내적으로 근사할 수 있습니다. 이미 알고있는 사용자 유사도와 선호도 점수로부터 아직 모르는 추천 등급을 예측할 수 있습니다.\n\n\n\n\n그림의 출처는 [이곳](https://www.packtpub.com/books/content/building-recommendation-engine-spark)입니다. 예시입니다. User와 Item 벡터곱으로 Ted가 아직 보지 않은 A아이템을 2.68만큼 선호할 것이라는 예측을 할 수 있습니다.\n\n\n\n## 군집화\n이전까지 다뤄본 방법들은 지도학습(Supervised Learning)에 해당하는 문제로 대체로 단순한 시스템에서 적용될 수 있습니다. 그렇다면 비지도학습을 추천시스템에 적용하면 어떻게 될까요? 만약 아주 큰 추천 시스템을 기획중일 때 가장 먼저 고려할 방법은 군집화(Clustering)입니다. 이전 사용자의 평점과 같은 정보가 충분하지 않는 상황이라면요.\n\n데이터가 너무 많다면, 협업 필터링을 하기 앞서 군집화를 통해서 관련 사용자 이웃을 줄이는 방법입니다. 군집화를 통해 유사한 사용자 그룹(클러스터)을 만들고 클러스터 레벨에서 연산된 아이템을 추천받게 됩니다.\n\n\n\n\n\n이후엔 각 방법에 대한 동작 및 구현에 대한 자세한 내용을 포스팅하도록 하겠습니다.\n\n\n\nReference\n\n[Building a Recommendation Engine with Spark](https://www.packtpub.com/books/content/building-recommendation-engine-spark)\n[R로 만드는 추천시스템](https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k)",
"json_metadata": "{\"tags\":[\"recommender\",\"data-science\",\"collaborative-filtering\"],\"image\":[\"https://steemitimages.com/DQmbW7q86X4i89UMo313dRmAVfYQDjaRFLMcZ3VBicZMxzU/image.png\"],\"links\":[\"https://www.packtpub.com/books/content/building-recommendation-engine-spark\",\"https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiywoLPp6nXAhUHX5QKHa2YBZ4QFgglMAA&url=http%3A%2F%2Facornpub.co.kr%2Fbook%2Fbuilding-recommend-system-r&usg=AOvVaw0g6psS4ZOxJRIMt1V48M2k\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "recommender",
"permlink": "4zjajb",
"title": "추천 시스템에 쓰이는 알고리즘 개요"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T09:08:06",
"trx_id": "8d301672d3dda6814d6674cbf65f88dd66082277",
"trx_in_block": 14,
"virtual_op": 0
}saemi32upvoted (100.00%) @smartsteem / two-ways-to-earn-with-smartsteem-do-the-smart-thing2018/02/26 01:25:48
saemi32upvoted (100.00%) @smartsteem / two-ways-to-earn-with-smartsteem-do-the-smart-thing
2018/02/26 01:25:48
| author | smartsteem |
| permlink | two-ways-to-earn-with-smartsteem-do-the-smart-thing |
| voter | saemi32 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20194521/Trx b0db9659ca62c38723a7ad6e095391b4cf2e328f |
View Raw JSON Data
{
"block": 20194521,
"op": [
"vote",
{
"author": "smartsteem",
"permlink": "two-ways-to-earn-with-smartsteem-do-the-smart-thing",
"voter": "saemi32",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T01:25:48",
"trx_id": "b0db9659ca62c38723a7ad6e095391b4cf2e328f",
"trx_in_block": 28,
"virtual_op": 0
}2018/02/05 00:49:42
2018/02/05 00:49:42
| active | {"account_auths":[],"key_auths":[["STM6jtkS9Tq98rTXqPkX6hB2A5CwJHKjkN6dV6T5PZPuPuMCiSp6w",1]],"weight_threshold":1} |
| creator | steem |
| delegation | 29700.000000 VESTS |
| extensions | [] |
| fee | 0.500 STEEM |
| json metadata | |
| memo key | STM6Ld1KhyvmPk9tMLUxyT423A7Pc52Kb517yoe72a77rnXPHwQXu |
| new account name | saemi32 |
| owner | {"account_auths":[],"key_auths":[["STM6uor66jjc7BhWWTMoPQeJ1ptd3iZM1d3AX2VnPK6jg3eMADnEu",1]],"weight_threshold":1} |
| posting | {"account_auths":[],"key_auths":[["STM6QNUHrgzZys1Z1Li4fgjWgnc69on9Jr7W9ZzgyUjaNh578QVyA",1]],"weight_threshold":1} |
| Transaction Info | Block #19589547/Trx edb511862e981204082649028fff58523908b363 |
View Raw JSON Data
{
"block": 19589547,
"op": [
"account_create_with_delegation",
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM6jtkS9Tq98rTXqPkX6hB2A5CwJHKjkN6dV6T5PZPuPuMCiSp6w",
1
]
],
"weight_threshold": 1
},
"creator": "steem",
"delegation": "29700.000000 VESTS",
"extensions": [],
"fee": "0.500 STEEM",
"json_metadata": "",
"memo_key": "STM6Ld1KhyvmPk9tMLUxyT423A7Pc52Kb517yoe72a77rnXPHwQXu",
"new_account_name": "saemi32",
"owner": {
"account_auths": [],
"key_auths": [
[
"STM6uor66jjc7BhWWTMoPQeJ1ptd3iZM1d3AX2VnPK6jg3eMADnEu",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM6QNUHrgzZys1Z1Li4fgjWgnc69on9Jr7W9ZzgyUjaNh578QVyA",
1
]
],
"weight_threshold": 1
}
}
],
"op_in_trx": 0,
"timestamp": "2018-02-05T00:49:42",
"trx_id": "edb511862e981204082649028fff58523908b363",
"trx_in_block": 25,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779084078
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779084078
},
"rc_account": {
"account": "saemi32",
"max_rc": "10164408779",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779084078
}
}
}Account Metadata
| POSTING JSON METADATA | |
| None | |
| JSON METADATA | |
| None |
{
"posting_json_metadata": {},
"json_metadata": {}
}Auth Keys
Owner
Single Signature
Public Keys
STM6uor66jjc7BhWWTMoPQeJ1ptd3iZM1d3AX2VnPK6jg3eMADnEu1/1
Active
Single Signature
Public Keys
STM6jtkS9Tq98rTXqPkX6hB2A5CwJHKjkN6dV6T5PZPuPuMCiSp6w1/1
Posting
Single Signature
Public Keys
STM6QNUHrgzZys1Z1Li4fgjWgnc69on9Jr7W9ZzgyUjaNh578QVyA1/1
Memo
STM6Ld1KhyvmPk9tMLUxyT423A7Pc52Kb517yoe72a77rnXPHwQXu
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM6uor66jjc7BhWWTMoPQeJ1ptd3iZM1d3AX2VnPK6jg3eMADnEu",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM6jtkS9Tq98rTXqPkX6hB2A5CwJHKjkN6dV6T5PZPuPuMCiSp6w",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM6QNUHrgzZys1Z1Li4fgjWgnc69on9Jr7W9ZzgyUjaNh578QVyA",
1
]
],
"weight_threshold": 1
},
"memo": "STM6Ld1KhyvmPk9tMLUxyT423A7Pc52Kb517yoe72a77rnXPHwQXu"
}Witness Votes
0 / 30
No active witness votes.
[]