# Multi-Armed Bandit

องค์ประกอบ **Multi-Armed Bandit** จะส่ง push notification ไปยังผู้ใช้ เช่นเดียวกับองค์ประกอบ [Push](/th/product/customer-journey/journey-elements/channels/push/) แต่แทนที่จะใช้ preset เดียว คุณสามารถให้ content variant ได้หลายรูปแบบ การปรับให้เหมาะสมจะทำงานอย่างต่อเนื่องบนข้อมูลสด โดยไม่ต้องเริ่มการทดสอบใหม่ด้วยตนเองหรือรักษาสัดส่วน traffic ที่คงที่ Pushwoosh จะส่ง traffic ไปยัง variant ที่ถูกเปิดมากที่สุด

<Aside type="caution" title="Multi-Armed Bandit เป็นฟีเจอร์ทดลอง">
- **Variants:** รองรับเฉพาะ push presets ที่มีอยู่เท่านั้น ยังไม่รองรับ Email, SMS หรือ in-app content variants
- **Success metric:** ขณะนี้มีเพียงการเปิด push เท่านั้นที่นับเป็นความสำเร็จ การเลือก custom event เป็น success metric จะมาในเร็วๆ นี้
- **Selection:** ขึ้นอยู่กับประสิทธิภาพโดยรวมของ variant ในผู้ใช้ทั้งหมด ไม่ใช่ตามความชอบส่วนบุคคล Pushwoosh จะหลีกเลี่ยงการส่ง variant เดิมไปยังบุคคลเดิมซ้ำสองครั้งติดต่อกัน

พฤติกรรมและการตั้งค่าอาจเปลี่ยนแปลงไปตามการพัฒนาของฟีเจอร์นี้
</Aside>

เพิ่มองค์ประกอบ **Multi-Armed Bandit** หลังจาก event หรือเงื่อนไขที่ควรจะกระตุ้นมัน จากนั้นกำหนดค่าองค์ประกอบ

<img src="/journey-elements-smart-content-1.webp" alt="องค์ประกอบ Multi-Armed Bandit ถูกเพิ่มเข้าไปใน journey canvas หลังจาก trigger"/>

## เพิ่ม content variants

<Aside type="tip">
ในการใช้ Multi-Armed Bandit ก่อนอื่นให้สร้าง push presets สองรายการขึ้นไปในบัญชีของคุณ [เรียนรู้เพิ่มเติมเกี่ยวกับการสร้าง push presets](/th/product/content/push-presets/) คุณต้องมีอย่างน้อยสอง variants เพื่อบันทึกองค์ประกอบ
</Aside>

1. ดับเบิลคลิกที่องค์ประกอบ **Multi-Armed Bandit** เพื่อเปิดการตั้งค่า
2. ใน **Content variants** เลือก push presets ที่แตกต่างกันอย่างน้อยสองรายการ
3. คลิก **Add variant** เพื่อเพิ่ม presets เพิ่มเติม ไม่มีการจำกัดจำนวนสูงสุด

<img src="/journey-elements-smart-content-2.webp" alt="ส่วน Content variants ของ Multi-Armed Bandit ที่มี push presets ที่เลือกไว้สองรายการและปุ่ม Add variant"/>

## เลือก success metric

ในส่วน **Reward** ให้เลือกสิ่งที่นับเป็นความสำเร็จสำหรับ variant:

- **Push opened:** variant จะชนะการส่งเมื่อผู้ใช้เปิด push นั้น
- **Event happened:** เลือก custom event เป็นสัญญาณความสำเร็จแทนการเปิด ตัวเลือกนี้จะมาในเร็วๆ นี้

ตั้งค่า **Reward window** เพื่อกำหนดว่า Pushwoosh จะรอนานกี่ชั่วโมงหลังจากการส่งก่อนที่จะตรวจสอบว่า push ถูกเปิดหรือไม่ ค่าเริ่มต้นคือ 2 ชั่วโมง

<img src="/journey-elements-smart-content-3.webp" alt="ส่วน Reward ของ Multi-Armed Bandit ที่เลือก Push opened, Event happened ถูกปิดใช้งาน และช่อง Reward window"/>

<Aside type="note">
หากผู้ใช้เปิด push หลังจาก reward window ปิดลง การเปิดนั้นจะยังคงปรากฏในสถิติข้อความปกติของคุณ แต่จะไม่นับรวมในการปรับให้เหมาะสมของ Multi-Armed Bandit สำหรับการเรียนรู้ การส่งนั้นจะถือว่าไม่ถูกเปิด ให้เลือกช่วงเวลาที่นานพอที่จะจับการเปิดที่สำคัญได้ ช่วงเวลาที่นานขึ้นยังหมายความว่า Multi-Armed Bandit จะรอนานขึ้นก่อนที่จะสามารถเรียนรู้จากการส่งแต่ละครั้ง
</Aside>

## ปรับแต่ง variants และเพิ่ม vouchers

<Aside type="note">
การตั้งค่าเหล่านี้ใช้กับองค์ประกอบ Multi-Armed Bandit ทั้งหมด ไม่ใช่แต่ละ variant แยกกัน ไม่ว่า Multi-Armed Bandit จะส่ง preset ใดไปยังผู้ใช้ กฎการปรับแต่งและ voucher pool เดียวกันจะเติมใน placeholders ของมัน หากมีเพียงบาง variant presets ของคุณที่มี placeholder หรือแท็ก `{{voucher}}` อยู่ variant อื่นๆ ก็จะไม่ใช้งานมัน — ไม่มีทางที่จะตั้งค่า event mappings หรือ voucher pools ที่แตกต่างกันสำหรับแต่ละ variant ได้
</Aside>

### ปรับแต่งด้วย Dynamic Content

สลับเปิด **Personalise message with event attributes** เพื่อเติม placeholders ใน variant presets ของคุณด้วยค่าจาก event แทนที่จะเป็น device tags Multi-Armed Bandit จะรวบรวม placeholders ที่ใช้ในทุก variants ที่คุณเลือกไว้ในรายการเดียว ดังนั้นคุณจึงแมปแต่ละ placeholder เพียงครั้งเดียว ไม่ว่า preset ใดจะถูกส่งไปก็ตาม
 
 [เรียนรู้เพิ่มเติมเกี่ยวกับการปรับแต่งใน journeys](/th/product/customer-journey/journey-elements/dynamic-content-and-liquid-templates-in-journeys/)

### เขียนทับ Liquid placeholders

สลับเปิด **Overwrite Liquid placeholders** และเลือก event เพื่อป้อน attributes ของมันลงในแท็ก Liquid ใน variant presets ของคุณที่ตรงกันตามชื่อ หากคุณเปิดใช้งานทั้ง Dynamic Content และการปรับแต่ง Liquid, Liquid จะมีความสำคัญกว่า

### ใช้ vouchers

สลับเปิด **Use Vouchers** เพื่อแนบโค้ดที่ไม่ซ้ำกันจาก voucher pool ไปยัง variant ใดก็ตามที่ถูกส่ง สร้าง variant presets ของคุณด้วย placeholder `{{voucher}}` ล่วงหน้า จากนั้นเลือก **Voucher Pool** ที่จะดึงโค้ดมาใช้ คุณยังสามารถใช้ **Assign Tag** เพื่อบันทึกโค้ดที่ส่งไปยัง user tag ได้อีกด้วย 

[เรียนรู้เพิ่มเติมเกี่ยวกับ vouchers](/th/product/content/vouchers/)

## ตั้งค่าประเภทข้อความ

เลือก **Marketing message** หรือ **Transactional message**:

* **Marketing message**: สำหรับแคมเปญและโปรโมชั่น กฎและข้อจำกัดทั้งหมดมีผลบังคับใช้ เคารพ: การยกเลิกการรับข่าวสาร, frequency capping และ silence period ไม่รวม: ผู้ใช้ใน [global control group](/th/product/audience-data-and-segmentation/global-control-group/)
* **Transactional message**: สำหรับข้อความการดำเนินงานหรือบริการ กฎและข้อจำกัดไม่มีผลบังคับใช้ ข้าม: การยกเลิกการรับข่าวสาร, frequency capping และ silence period ส่งถึง: ผู้ใช้ใน [global control group](/th/product/audience-data-and-segmentation/global-control-group/)

<img src="/journey-elements-smart-content-5.webp" alt="การเลือกประเภทข้อความขององค์ประกอบ Multi-Armed Bandit พร้อมตัวเลือก Marketing message และ Transactional message"/>

[เรียนรู้ว่าประเภทข้อความส่งผลต่อการส่งอย่างไร](/th/product/messaging-channels/marketing-vs-transactional/)

## กำหนดค่าการตั้งค่าการส่งข้อความ

### ตั้งค่า frequency capping

<Aside type="note">
ตัวเลือก Frequency capping จะใช้ได้เฉพาะเมื่อเลือก **Marketing message** เท่านั้น เมื่อคุณเลือก **Transactional message**, frequency capping จะไม่มีผลบังคับใช้และตัวเลือกเหล่านี้จะถูกปิดใช้งาน
</Aside>

ใช้ [**Frequency capping**](/th/product/messaging-channels/global-frequency-capping/#enable-global-frequency-capping) เพื่อจำกัดความถี่ที่ผู้ใช้ได้รับข้อความ push เพื่อป้องกันการส่งข้อความมากเกินไปและลดการเลิกใช้งาน ในการตั้งค่าองค์ประกอบ Multi-Armed Bandit ให้เลือกหนึ่งในตัวเลือกต่อไปนี้:

* **Use Global frequency capping settings**

  ใช้ข้อจำกัดทั่วทั้งโปรเจกต์ที่กำหนดค่าไว้ใน [Global frequency capping settings](/th/product/messaging-channels/global-frequency-capping/#enable-global-frequency-capping) ของคุณ

  ตัวอย่างเช่น หากขีดจำกัดทั่วโลกตั้งไว้ที่ 3 ข้อความใน 9 วัน ข้อความเพิ่มเติมที่เกินขีดจำกัดนี้จะถูกข้ามไป

* **Ignore Global frequency capping**

  ผู้ใช้จะได้รับข้อความนี้แม้ว่าพวกเขาจะเกินขีดจำกัดข้อความของช่องทางแล้วก็ตาม ใช้ตัวเลือกนี้ด้วยความระมัดระวังเพื่อหลีกเลี่ยงการส่งข้อความมากเกินไป

* **Use custom frequency capping**

  ตั้งค่าขีดจำกัดข้อความที่กำหนดเองสำหรับข้อความนี้ หากผู้ใช้เกินขีดจำกัดที่กำหนดเองนี้ ข้อความจะถูกข้ามไป และผู้ใช้จะไปยังขั้นตอนถัดไป
  > **สำคัญ:** Custom frequency capping ไม่ได้แยกข้อความออกจาก **Global frequency capping** ข้อความทั้งหมดที่ส่งในช่องทางเดียวกัน รวมถึงข้อความจาก journeys หรือแคมเปญอื่นๆ ยังคงถูกนับรวมในขีดจำกัดทั่วโลก หากผู้ใช้ได้รับข้อความ push 3 ข้อความในสัปดาห์นี้จากแหล่งอื่นแล้ว ข้อความนี้อาจยังคงถูกบล็อก แม้ว่า custom capping จะอนุญาตก็ตาม
  [เรียนรู้เพิ่มเติม](/th/product/messaging-channels/global-frequency-capping/#customize-capping-for-specific-messages)

### ตั้งค่าขีดจำกัดอัตราการส่ง

การตั้งค่า **Send rate** ควบคุมความเร็วในการส่งข้อความไปยังผู้ชมของคุณ การปรับอัตราการส่งช่วยให้คุณจัดการความเร็วในการส่ง ป้องกันการทำงานหนักเกินไปของ backend และปรับปรุงความสามารถในการส่งโดยรวม

เลือกหนึ่งในตัวเลือกต่อไปนี้:

* **Use global send rate settings**
  ใช้ขีดจำกัดอัตราการส่งที่กำหนดค่าไว้ในการตั้งค่าการส่งข้อความของโปรเจกต์ของคุณ หากไม่มีการตั้งค่าขีดจำกัด ข้อความทั้งหมดจะถูกส่งทันที ใช้ตัวเลือกนี้เมื่อคุณต้องการให้ความเร็วในการส่งเป็นไปตามกฎเริ่มต้นของโปรเจกต์ของคุณ [เรียนรู้เพิ่มเติมเกี่ยวกับขีดจำกัดอัตราการส่งทั่วโลก](/th/product/messaging-channels/global-frequency-capping/#set-send-rate-limits)

![ใช้การตั้งค่าอัตราการส่งทั่วโลก](/send-rate-in-journey-elements-1.webp)

* **Send messages without send rate**
  ส่งข้อความให้เร็วที่สุดเท่าที่จะทำได้ โดยไม่สนใจขีดจำกัดอัตราการส่งทั่วโลกใดๆ ใช้ด้วยความระมัดระวังเพื่อหลีกเลี่ยงการทำให้ backend ของคุณทำงานหนักเกินไปหรือสร้างการส่งที่พุ่งสูงขึ้น

![ส่งข้อความโดยไม่มีอัตราการส่ง](/send-rate-in-journey-elements-2.webp)

* **Use custom send rate**
  เขียนทับอัตราการส่งทั่วโลกสำหรับข้อความนี้เท่านั้น ช่วยให้คุณสามารถระบุจำนวนข้อความที่ส่งต่อนาที ทำให้คุณควบคุมความเร็วในการส่งได้อย่างเต็มที่ ข้อความจะถูกส่งในอัตราที่กำหนดเองที่คุณกำหนดในองค์ประกอบข้อความ

![ใช้อัตราการส่งที่กำหนดเอง](/send-rate-in-journey-elements-3.webp)

เมื่อคุณกำหนดค่าองค์ประกอบ Multi-Armed Bandit เสร็จแล้ว ให้คลิก **Save**

## วิธีที่ Multi-Armed Bandit เลือก variant

Multi-Armed Bandit ไม่ได้สลับระหว่าง variants อย่างเท่าเทียมกันหรือทำการแบ่ง 50/50 แบบคงที่เหมือน [A/B/n split](/th/product/customer-journey/journey-elements/flow-controls/abn-split/) แต่จะคอยดูอย่างต่อเนื่องว่า variant ใดถูกเปิดบ่อยกว่าและค่อยๆ ส่ง variant นั้นไปยังส่วนแบ่งผู้ใช้ที่ใหญ่ขึ้น มันยังคงส่ง variants อื่นๆ บ่อยพอที่จะเรียนรู้จากข้อมูลจริงต่อไป

สิ่งที่ควรรู้เกี่ยวกับพฤติกรรมของมัน:

- ต้องใช้เวลาและปริมาณข้อมูลพอสมควรเพื่อให้มีผู้ชนะที่ชัดเจน ในช่วงแรก variants จะถูกส่งไปในสัดส่วนที่ใกล้เคียงกัน
- Pushwoosh จะหลีกเลี่ยงการส่ง variant เดียวกันไปยังผู้ใช้คนเดิมซ้ำสองครั้งติดต่อกัน เพื่อไม่ให้ผู้คนได้รับข้อความเดียวกันซ้ำๆ
- การเลือกขึ้นอยู่กับประสิทธิภาพโดยรวมของแต่ละ variant ในผู้ใช้ทั้งหมดใน journey ไม่ใช่ตามความชอบส่วนบุคคลของผู้ใช้

แม้ว่า variant จะได้รับการยืนยันว่าเป็นผู้ชนะแล้ว Multi-Armed Bandit ก็ยังคงทำงานต่อไป ไม่เหมือนกับ [A/B/n split](/th/product/customer-journey/journey-elements/flow-controls/abn-split/) ที่จะล็อคผู้ชนะและส่ง traffic ทั้งหมดไปที่นั่น variant ที่ชนะจะยังคงได้รับส่วนแบ่งการส่งที่ใหญ่ที่สุด ในขณะที่ variant อื่นๆ ยังคงได้รับส่วนแบ่งที่น้อยลงเพื่อให้ Pushwoosh สามารถเรียนรู้ต่อไปได้ หากประสิทธิภาพเปลี่ยนแปลงไปตามกาลเวลา Multi-Armed Bandit จะปรับตัวและสามารถย้าย traffic ไปยังผู้นำใหม่ได้


## สถานการณ์ตัวอย่าง: การกู้คืนตะกร้าสินค้าที่ถูกทิ้ง

ใช้ Multi-Armed Bandit เมื่อผู้ใช้เพิ่มสินค้าลงในตะกร้าแต่ไม่ทำการชำระเงินให้เสร็จสิ้น ตัวอย่างด้านล่างนี้เริ่มต้น journey ด้วย event **Cart abandoned** และทดสอบ push variants สามแบบเพื่อดึงผู้ใช้กลับมา

1. **เตรียม push presets** สร้าง push presets สามรายการในบัญชีของคุณก่อนที่จะสร้าง journey [เรียนรู้เพิ่มเติมเกี่ยวกับการสร้าง push presets](/th/product/content/push-presets/) 

สำหรับสถานการณ์ตะกร้าสินค้าที่ถูกทิ้งนี้ คุณอาจสร้าง presets ดังนี้:

   - **Cart reminder:** "มีสินค้ากำลังรอคุณอยู่ในตะกร้า"
   - **Cart urgency:** "ตะกร้าของคุณจะหมดอายุใน 1 ชั่วโมง"
   - **Cart discount:** "รับส่วนลด 10% หากคุณชำระเงินตอนนี้"

2. **สร้าง journey** ใน **Campaigns → Customer Journey Builder** คลิก **Create Campaign** และเลือก **Build a Journey from Scratch** เพิ่มองค์ประกอบ [Trigger-based entry](/th/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) ลงใน canvas

3. **ตั้งค่า trigger** สร้างหรือเปิดใช้งาน event **Cart abandoned** ที่จะทำงานเมื่อผู้ใช้ไม่ทำการชำระเงินให้เสร็จสิ้นภายในไม่กี่ชั่วโมง ในองค์ประกอบ **Trigger-based entry** เลือก event นี้เป็น journey trigger [เรียนรู้เพิ่มเติมเกี่ยวกับ events](/th/product/audience-data-and-segmentation/events/)

4. **เพิ่มองค์ประกอบ Multi-Armed Bandit** วางองค์ประกอบ **Multi-Armed Bandit** หลังจาก trigger จากนั้นเปิดการตั้งค่า

5. **เพิ่ม content variants** ใน **Content variants** เลือก presets สามรายการที่คุณสร้างในขั้นตอนที่ 1

6. **เลือก success metric** ใน **Reward** เลือก **Push opened** ตั้งค่า **Reward window** เป็น 2 ชั่วโมง ช่วงเวลานี้ยาวนานพอที่จะจับการเปิดจากผู้ใช้ที่ไม่ได้ตรวจสอบโทรศัพท์ทันที แต่สั้นพอที่จะเรียนรู้ได้อย่างรวดเร็ว

7. **ตั้งค่าให้เสร็จสิ้นและเปิดใช้งาน** กำหนดค่าประเภทข้อความและการตั้งค่าการส่ง คลิก **Save** และเปิดใช้งาน journey

### หลังจากเปิดใช้งาน

Multi-Armed Bandit อาจมีพฤติกรรมประมาณนี้ การแบ่ง traffic และเวลาที่แท้จริงขึ้นอยู่กับปริมาณการส่งและการตอบสนองของผู้ใช้ต่อแต่ละ variant

ในตอนแรก Pushwoosh จะส่งทั้งสาม variants ในสัดส่วนที่ใกล้เคียงกัน เนื่องจากยังไม่มีข้อมูลเพียงพอ เมื่อมีการเปิดเข้ามา มันจะเริ่มเปลี่ยน traffic ไปยัง variant ที่ถูกเปิดมากกว่า ตัวอย่างเช่น หาก "รับส่วนลด 10% หากคุณชำระเงินตอนนี้" มีประสิทธิภาพดีกว่าอีกสองอย่างอย่างสม่ำเสมอ มันอาจได้รับการส่งประมาณ 60% ในขณะที่อีกสองอย่างแบ่งส่วนที่เหลือ

Pushwoosh ยังคงส่ง variants ที่มีประสิทธิภาพต่ำกว่าด้วยเช่นกัน สิ่งนี้ทำให้การเรียนรู้ดำเนินต่อไปและเป็นไปตามกฎที่ว่าผู้ใช้ที่เพิ่งได้รับ variant หนึ่งจะไม่ได้รับ variant เดิมอีกในครั้งต่อไปที่พวกเขามาถึงขั้นตอนนี้

## ตรวจสอบผลลัพธ์

หลังจากที่คุณบันทึกองค์ประกอบและเปิดใช้งาน journey แล้ว ให้เปิดแผงสถิติขององค์ประกอบ Multi-Armed Bandit เพื่อดูว่า variants ของคุณมีประสิทธิภาพเป็นอย่างไร

<img src="/journey-elements-smart-content-4.webp" alt="แผงสถิติของ Multi-Armed Bandit พร้อมแบนเนอร์คำตัดสินและเมตริก Sent, Opened และ Traffic ของแต่ละ variant"/>

แบนเนอร์ที่ด้านบนจะแสดงสถานะปัจจุบันของการทดลอง:

- **Not enough data yet:** Multi-Armed Bandit ยังไม่ได้รวบรวมการส่งที่เพียงพอที่จะบอกอะไรที่มีความหมายได้
- **Still learning:** มีข้อมูลแล้ว แต่ยังไม่มี variant ใดเป็นผู้นำที่ชัดเจนและมีนัยสำคัญทางสถิติ
- **Significant leader:** มี variant หนึ่งที่ได้รับการยืนยันว่ามีประสิทธิภาพดีกว่า variant อื่นๆ มันจะถูกทำเครื่องหมายด้วยป้าย **Winner**


สำหรับแต่ละ variant คุณจะเห็น:

- **Sent:** จำนวนครั้งที่ variant นี้ถูกส่ง
- **Opened:** ส่วนแบ่งของการส่งที่ถูกเปิด
- **Traffic:** ส่วนแบ่งปัจจุบันของการส่งใหม่ที่ไปยัง variant นี้


## Multi-Armed Bandit เทียบกับ A/B/n split

ทั้ง **Multi-Armed Bandit** และ [**A/B/n split**](/th/product/customer-journey/journey-elements/flow-controls/abn-split/) ช่วยปรับปรุงการส่งข้อความของคุณ แต่ทำงานแตกต่างกัน ใช้ตารางด้านล่างเพื่อตัดสินใจว่าอันไหนเหมาะกับกรณีการใช้งานของคุณ

| | **Multi-Armed Bandit** | **A/B/n Split** |
|---|---|---|
| **กลไก** | เปลี่ยน traffic ไปยัง variant ที่มีประสิทธิภาพดีที่สุดอย่างต่อเนื่องโดยอิงจากการเปิดแบบสด | แบ่งผู้ใช้ออกเป็นสาขาตามเปอร์เซ็นต์คงที่ที่คุณกำหนดไว้ล่วงหน้า สาขาสามารถมี flow ปลายทางที่แตกต่างกันโดยสิ้นเชิงได้ |
| **Variants** | ต้องมี push presets อย่างน้อยสองรายการ ไม่มีการจำกัดจำนวนสูงสุดของ variants | สูงสุดสี่สาขาต่อการทดสอบ |
| **การแบ่ง Traffic** | เริ่มต้นใกล้เคียงกัน แล้วเปลี่ยนโดยอัตโนมัติเมื่อมีข้อมูลเข้ามา | เปอร์เซ็นต์คงที่ที่คุณตั้งค่าไว้ และจะคงที่จนกว่าจะมีการเลือกผู้ชนะ |
| **ระยะเวลา** | ทำงานอย่างต่อเนื่อง ไม่มีกำหนดสิ้นสุด | ทำงานจนกว่าจะถึงนัยสำคัญทางสถิติหรือคุณหยุดด้วยตนเอง |
| **ผู้ชนะ** | ไม่มีการล็อค: variant ที่ชนะจะได้รับ traffic มากขึ้น แต่ variant อื่นๆ ยังคงได้รับบางส่วน | ล็อคหลังจากเลือกผู้ชนะ: สาขาที่แพ้จะถูกปิดใช้งาน และผู้ใช้ใหม่ทั้งหมดจะถูกส่งไปยังผู้ชนะ |
| **เหมาะสำหรับ** | การปรับปรุงเนื้อหาอย่างต่อเนื่องสำหรับขั้นตอนการส่งข้อความเดียว (สำหรับตอนนี้เฉพาะ push presets) | การทดสอบ flow หรือลำดับที่มีโครงสร้างแตกต่างกันเมื่อคุณต้องการการตัดสินใจครั้งเดียวและล็อคผล |