[AWS] Personalize 2

https://blog.naver.com/sssang97/222401798168
์ด์ „ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ ์ž‘์„ฑํ•œ๋‹ค.




์‹ค์‹œ๊ฐ„ ํ•™์Šต

์ด์ „ ํฌ์ŠคํŠธ์—์„œ๋Š” CSV ํŒŒ์ผ๋กœ ๋Œ€๋Ÿ‰์˜ ํ•™์Šต ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”์‹œํ‚ค๋Š” ์ž‘์—…์„ ํ–ˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๊ฑด ์ดˆ๊ธฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๊ณ , ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์€ ์‹ค์‹œ๊ฐ„ ํ•™์Šต์„ ํ†ตํ•ด ๊พธ์ค€ํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ํ•ญ๋ชฉ์„ ๋ณด๊ฑฐ๋‚˜ ๊ตฌ๋งคํ–ˆ๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฐ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹น์—ฐํžˆ interaction ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•ด์ค˜์•ผ ํ•˜๊ณ , ์ƒํ’ˆ์˜ ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋ ๋•Œ๋„ ํ•ญ์ƒ ์—…๋ฐ์ดํŠธ๋ฅผ ์ณ์ค˜์•ผ ํ•œ๋‹ค.

์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฒคํŠธ ํŠธ๋ž˜์ปค๋ฅผ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ํ•™์Šต์ด๋‹ค.

์ด๋ฒคํŠธ ํŠธ๋ž˜๊ฑฐ ํ•ญ๋ชฉ์— ๋“ค์–ด๊ฐ€ ํŠธ๋ž˜์ปค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.


๋งŒ๋“œ๋Š”๋ฐ ์žˆ์–ด์„œ ๋”ฑํžˆ ๋ญ ์„ ํƒ์‚ฌํ•ญ์ด ์žˆ์ง„ ์•Š๋‹ค. ๊ทธ๋ƒฅ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ €๊ธฐ tracking ID๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ

์ €๊ฑธ ์ง‘์–ด๋„ฃ๋Š”๋ฐ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

interaction์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์ง‘์–ด๋„ฃ๋Š” ๋ฐฉ๋ฒ•์€ ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const aws = require('aws-sdk');

exports.handler = async (event) => {

    const personalizeEvents = new aws.PersonalizeEvents({})

    await personalizeEvents
		.putEvents({
			eventList: [
				{
				    eventType: 'VIEW', //์ด๋ฒคํŠธ ์œ ํ˜•
					sentAt: new Date(), 
					itemId: '33794', //์•„์ดํ…œ ์‹๋ณ„์ž
					properties: {
					    rating: "11" // RATING ํ•„๋“œ
					}
				},
			],
			sessionId: 'test', //๋ฐฉ๋ฌธ ์‹๋ณ„์šฉ ์„ธ์…˜๊ฐ’
			trackingId: 'a3c1ee52-d175-4618-b2d2-b36683d0f64b', //ํŠธ๋ž˜๊ฑฐ ID
			userId: "1", //์œ ์ € ์‹๋ณ„์ž
		})
		.promise()

        ......

๋น„์Šทํ•˜๊ฒŒ, ์ƒํ’ˆ ๋ฐ์ดํ„ฐ์…‹์€ putItems. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์…‹์€ putUsers๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
์‚ฌ์šฉ๋ฒ•์€ ๊ฑฐ์˜ ๊ฐ™์œผ๋‹ˆ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/PersonalizeEvents.html

์—ฌํŠผ ์ €๊ฑธ๋กœ ์ถ”์ฒœ๊ฐ’์ด ๋ฐ”๋€Œ๋Š”์ง€ ํ•œ๋ฒˆ ํ™•์ธํ•ด๋ณด๊ฒ ๋‹ค.

์‚ฌ์šฉ์ž '1'๋กœ ์ถ”์ฒœ์„ ๊บผ๋‚ด๋ณด๋ฉด


์ฒ˜์Œ์—๋Š” ์œ„์™€ ๊ฐ™์ด ์ถ”์ฒœ์„ ๋„์›Œ์คฌ๋‹ค.
๊ทธ๋ž˜์„œ ์ €๊ธฐ ๋งจ ์•„๋ž˜์— ๊น”๋ฆฐ 33794๋ฅผ ์ƒˆ๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ค˜๋ดค๋‹ค.


๊ทธ๋Ÿผ ํ•™์Šต์„ ํ†ตํ•ด ๋ฐ”๋กœ ์Šค์ฝ”์–ด๊ฐ€ ์ƒ์Šนํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.




์ƒํ’ˆ๋“ค๊ฐ„์˜ ์œ ์‚ฌ๋„ ๋ถ„์„: aws-sims ๋ ˆ์‹œํ”ผ

์ด๋ฒˆ์—๋Š” ์ƒํ’ˆ์— ๋Œ€ํ•ด์„œ ํ•œ๋ฒˆ ๋‹ค๋ค„๋ณด๊ฒ ๋‹ค.
๋ฐ์ดํ„ฐ๊ทธ๋ฃน์— ๋“ค์–ด๊ฐ€ ๋ฐ์ดํ„ฐ์…‹์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์ด๋ ‡๊ฒŒ ์ •์˜ํ•ด์„œ

{
	"type": "record",
	"name": "Items",
	"namespace": "com.amazonaws.personalize.schema",
	"fields": [
		{
			"name": "ITEM_ID",
			"type": "string"
		},
		{
			"name": "TITLE",
			"type": "string"
		},
		{
			"name": "GENRE",
			"type": ["string", "null"], 
			"categorical": true
		}
	],
	"version": "1.0"
}

์ด์ „์˜ ์ด ์˜ํ™”๊ฐ’๋“ค์„ ๋„ฃ์–ด์ค„ ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์žฅ๋ฅด๋Š” ์ผ์ข…์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ผ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๋„ฃ์–ด์ค€๋‹ค.
๊ทธ๊ฑธ ์‹๋ณ„ํ•ด์ฃผ๋Š” ๊ฐ’์ด categorical์ด๋ผ๋Š” ์˜ˆ์•ฝ๋œ ํ‚ค์›Œ๋“œ๋‹ค.
๊ทธ๋Ÿผ ์ €๊ฑธ๋กœ ์—ฎ์ธ ํ•ญ๋ชฉ๋“ค์€ ์—ฐ๊ด€์ด ์žˆ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋‹ค์Œ์— ์บ ํŽ˜์ธ์„ ๋˜ ๋งŒ๋“ค๊ณ 

๊ทธ๋ฆฌ๊ณ  aws-sims ๋ ˆ์‹œํ”ผ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ๋‹ค.
์ด๊ฑด ๋ง ๊ทธ๋Œ€๋กœ ํŠน์ • ์ƒํ’ˆ๊ณผ ๊ด€๋ จ๋œ ์ƒํ’ˆ๋“ค์„ ๋ฝ‘์•„๋‚ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๋งŒ๋“ค๊ณ 

1๋กœ ์ฐ์–ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ

์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ฉด ์žฅ๋ฅด๊ฐ’๋“ค์ด ์ƒ๋‹นํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์žฅ๋ฅด๊ฐ’์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์„ค์ •ํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ €๊ฑธ๋กœ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ด๋‚ธ ๊ฒƒ์ด๋‹ค.




aws-personalized-ranking ๋ ˆ์‹œํ”ผ

์ด๊ฑด ํŠน์ • ์ƒํ’ˆ๋“ค ์ค‘์—์„œ๋งŒ ์ถ”์ฒœ ์ˆœ์œ„๋ฅผ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ ˆ์‹œํ”ผ๋‹ค.
์œ„์˜ ๋ ˆ์‹œํ”ผ๋“ค์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ „์ฒด ์ƒํ’ˆ์—์„œ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ–ˆ๋‹ค๋ฉด, ์ด๊ฑด ๋”ฑ ๋‚ด๊ฐ€ ์ง€์ •ํ•œ ์ƒํ’ˆ๋“ค ์ค‘์—์„œ๋งŒ ์šฐ์—ด์„ ๊ฐ€๋ฆด ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ์ž ID์™€ ์ˆœ์„œ๋ฅผ ์•Œ๊ณ  ์‹ถ์€ ์ƒํ’ˆ๋“ค์˜ ID๋ฅผ ์ฃผ๋ฉด

์ด๋ ‡๊ฒŒ ๋”ฑ ์ˆœ์„œ ์ •ํ•ด์„œ ๋˜์ ธ์ค€๋‹ค.




popuarlity-count ๋ ˆ์‹œํ”ผ

์ด๊ฑด ์ „์ฒด ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์ƒํ’ˆ์„ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ ˆ์‹œํ”ผ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ’์ด ๋ฝ‘ํžˆ๋Š”๋ฐ, ์Šค์ฝ”์–ด๋ฅผ ๋ณด์—ฌ์ฃผ์ง„ ์•Š๋Š”๋‹ค.

๋‹ค๋ฅธ USER_ID ๊ฐ’์œผ๋กœ ๋ฝ‘์•„๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
์ „์ฒด ์‚ฌ์šฉ์ž๋กœ ๊ธฐ์ค€์„ ๋ฝ‘๋Š” ๊ฒƒ์ด๋ผ ๊ทธ๋ ‡๋‹ค.

๊ทผ๋ฐ ์ด๋Ÿด๊ฑฐ๋ฉด USER_ID๋Š” ์™œ ์ค˜์•ผํ•˜๋Š”๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.



์ฐธ์กฐ
https://docs.aws.amazon.com/ko_kr/personalize/latest/dg/native-recipe-popularity.html
https://docs.aws.amazon.com/personalize/latest/dg/gs-prerequisites.html
https://docs.aws.amazon.com/personalize/latest/dg/API_UBS_PutEvents.html
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/PersonalizeEvents.html#putEvents-property