Tính khả dụng của khách sạn và thuật toán đề xuất phòng @ MMT

Tại MakeMyTrip, chúng tôi phục vụ một nhóm người mua sắm khách sạn đa dạng và giúp họ hoàn thiện các kế hoạch dựa trên các yêu cầu thông tin, chiếm dụng và thông tin khác nhau. Điều đó đang được nói, hai nhu cầu quan trọng nhất của người dùng phải được đáp ứng cho tất cả là như nhau - phòng trống của khách sạn và giá phòng theo ngân sách một. Trong bài đăng trên blog này, chúng tôi chia sẻ một số hiểu biết về cách chúng tôi tăng mức độ sẵn có của khách sạn trên nền tảng của chúng tôi và sử dụng lập trình động để giải quyết vấn đề tìm kiếm sự kết hợp giữa các phòng rẻ nhất để cung cấp cho khách hàng mạnh mẽ và hữu ích hơn.

Trước tiên chúng ta hãy hiểu tại sao phòng trống và giá phòng, đặc biệt là giá rẻ nhất, rất quan trọng.

Sẵn có của khách sạn: Điều tối quan trọng là phải cho khách hàng thấy đủ khách sạn để lựa chọn trên trang danh sách khách sạn. Không có hoặc có sẵn ít khách sạn dẫn đến rất nhiều khách hàng giảm trên chính danh sách, dẫn đến tổn thất kinh doanh tiềm năng.

Giá phòng: Hầu hết khách du lịch so sánh giá phòng cho một khách sạn trên các công ty du lịch trực tuyến (OTA) và thực hiện giao dịch trên OTA với giá rẻ nhất. Xem xét một số lượng đáng kể các đặt phòng xảy ra trên các phòng với giá rẻ nhất, điều quan trọng là hiển thị / làm nổi bật giá phòng rẻ nhất trên trang chi tiết khách sạn để giúp khách hàng đưa ra quyết định nhanh chóng.

Sẵn có khách sạn thấp

Phát hiện vấn đề

Tại MakeMyTrip, chúng tôi đăng nhập rất nhiều dữ liệu và phân tích dữ liệu thường xuyên để đưa ra những hiểu biết có thể hành động. Một trong những phát hiện gần đây của chúng tôi là lượng khách sạn thấp hoặc không có trên trang danh sách khách sạn cho một số lượng đáng kể các tìm kiếm thành phố. Có hai lý do chính cho việc này:

  • Ít hàng tồn kho hơn trong mùa cao điểm / cuối tuần dài
  • Thiếu giá trong hệ thống kiểm kê MakeMyTrip cho công suất phòng được yêu cầu (ví dụ: chủ khách sạn chưa định cấu hình giá cho 3 người lớn)

Hãy để một ví dụ để hiểu điều này tốt hơn. Dưới đây là một ảnh chụp nhanh về hàng tồn kho được tải lên bởi chủ khách sạn trong hệ thống của chúng tôi cho khách sạn ’X. (A là viết tắt của người lớn và C cho trẻ em).

Hình (1): Ảnh chụp hàng tồn kho

Tìm kiếm người dùng 1 (2 phòng: Phòng 1 Tiết1A, Phòng 2 Từ1A) - Trong trường hợp này, mặc dù chúng tôi có sẵn 3 phòng (mặc dù các loại khác nhau), chúng tôi đã trả lại không có phòng khách sạn vì chúng tôi phù hợp với tiêu chí tìm kiếm theo từng tiêu chí loại phòng và không có loại phòng nào có số lượng tồn kho ≥2.

Tìm kiếm người dùng 2 (Phòng 1- 3A) - Trong trường hợp này cũng vậy, chúng tôi đã trả lại không có sẵn khách sạn vì chủ khách sạn không định cấu hình giá cho các tiêu chí tìm kiếm ở trên.

Trong cả hai trường hợp, có một cách để đáp ứng các tiêu chí tìm kiếm của người dùng bằng cách kết hợp các loại phòng khác nhau. Vấn đề trở nên phức tạp hơn nhiều vì mỗi khách sạn có ngưỡng tuổi con riêng và giá tương ứng.

Giải pháp ba điểm

  1. Thay đổi tiêu chí tìm kiếm - Chúng tôi đã ngừng khớp tiêu chí tìm kiếm chính xác của người dùng với từng loại phòng và bắt đầu tìm kiếm với yêu cầu tìm kiếm được chuyển đổi. Điều này đặc biệt được thực hiện cho các tìm kiếm chiếm cao hơn vì tính khả dụng thường thấp.
  2. Xây dựng thuật toán kết hợp phòng rẻ nhất - Đối với khách hàng của chúng tôi, thỏa thuận rẻ nhất là tốt nhất. Để giúp giải quyết vấn đề này và vấn đề về sự sẵn có của khách sạn, việc xây dựng một thuật toán để giới thiệu người dùng với sự kết hợp giữa các phòng rẻ nhất là điều hợp lý.
  3. Yêu cầu chủ khách sạn định cấu hình giá cho công suất cao hơn - Vì 60% người dùng đi du lịch một mình hoặc theo cặp vợ chồng, chủ khách sạn thường tối ưu hóa giá và hàng tồn kho cho phòng đơn và đôi. Để giúp khách hàng có được kết quả tìm kiếm tốt hơn cho tỷ lệ lấp đầy> 2, chúng tôi đã yêu cầu các chủ khách sạn định cấu hình tất cả các kết hợp chiếm dụng có thể có mà họ hỗ trợ.

Đây là cách chúng tôi nghĩ rằng giải pháp tổng thể nên làm việc.

Hình (2): Sơ đồ dòng chảy

(1) và (2) được tô màu xanh lá cây. Tùy thuộc vào kênh mà khách sạn đang được tiêu thụ, chúng tôi có thể có hoặc không có thông tin bắt buộc để chạy thuật toán kết hợp phòng rẻ nhất. Để xử lý các trường hợp như vậy, chúng tôi đã xây dựng một số thuật toán bổ sung để tạo / dự đoán dữ liệu cần thiết (số lượng hàng tồn kho là một trong số chúng).

Ảnh hưởng kinh doanh

Chúng tôi thực hiện cả (1) và (2). Như mong đợi, tính sẵn có của khách sạn tăng lên nhiều lần trên trang danh sách của chúng tôi cho các yêu cầu tìm kiếm của hơn 2 người lớn. Chúng tôi cũng bắt đầu nhận thêm 5% đêm phòng mỗi ngày. Nhìn chung, đã có một bước nhảy vọt hơn 50% về số lượng đặt phòng có nhiều hơn 2 Người lớn.

Hình (3): Xu hướng đặt trước và sau khi phát hành tính năng

Những thách thức và cách tiếp cận tính toán

Vấn đề đề xuất phòng rẻ nhất là một vấn đề tối ưu hóa tổ hợp.

Cho N phòng khách sạn và khách P (người lớn + trẻ em), tìm tổ hợp phòng rẻ nhất để chứa khách P.

Để chạy bất kỳ thuật toán tối ưu hóa nào, chúng tôi cần có các thuộc tính dữ liệu cần thiết để:

  • Tạo tất cả các nghề nghiệp có thể cho một phòng
  • Tính giá cho những trường hợp như vậy

Đối với điều này, chúng tôi bắt đầu tiêu thụ các thuộc tính cấp phòng và khách sạn như ngưỡng tuổi trẻ em, người lớn / trẻ em tối đa được phép trong phòng, số lượng phòng trống của từng loại phòng, giá người lớn thêm, v.v ... Mỗi khách sạn có thể cấu hình độc lập các chi tiết thuế quan như, nghề nghiệp cho đến khi anh ta không tính thêm tiền (chiếm căn cứ), đến tuổi nào anh ta sẽ coi khách là trẻ em, giá trẻ em thêm, giá người lớn thêm, người lớn tối đa / trẻ em có thể ở trong mỗi phòng. Tất cả những điều này cần được chăm sóc trong khi tạo và tính giá của từng phòng và công suất phòng. Xử lý các thuộc tính này làm tăng tính đa chiều tính toán phức tạp. Thách thức bổ sung là giữ nguyên độ trễ tìm kiếm api. Các tính toán này sẽ được thực hiện theo thời gian thực và cho yêu cầu chứa 200 khách sạn 250.

Mặc dù chúng tôi luôn có sẵn lập trình động để giải quyết vấn đề này, chúng tôi đã xem xét giải pháp vũ phu và một vài cách tiếp cận tham lam để xem liệu chúng có hiệu quả / làm việc cho các trường hợp sử dụng của chúng tôi không.

Giải pháp Brute Force: Điều này liên quan đến việc tạo ra mọi sự kết hợp có thể cho hàng tồn kho nhất định với tất cả các gói thuế. Những phòng này sau đó cũng cần được kết hợp với các tổ hợp phòng khác nhau. Điều này dẫn đến sự phức tạp thời gian theo cấp số nhân.

Hình (4): Cách tiếp cận lực lượng mạnh mẽ dẫn đến độ phức tạp theo thời gian theo cấp số nhân

Điều này là khả thi nhưng không thể mở rộng. Ngoài ra, nó sẽ thêm độ trễ đáng kể của api tìm kiếm.

Phương pháp tiếp cận tham lam: Chúng tôi đã tìm hiểu một vài chiến lược nhưng tìm thấy một trường hợp phản biện trong mỗi chiến lược. Vấn đề cơ bản là chúng tôi không có các phòng được sắp xếp theo thứ tự giá và khách (khách). Hơn nữa, bất kỳ phòng / bộ cao cấp có thể chứa nhiều người hơn so với một phòng tiêu chuẩn.

Thuật toán kết hợp phòng rẻ nhất

Hãy cho chúng tôi hiểu một vài thuật ngữ và ký hiệu trước khi chúng tôi chuyển sang thuật toán.

Hình (5): Thuật ngữ cho thuật toán kết hợp phòng rẻ nhất

Chúng tôi đã mô hình hóa vấn đề tìm kiếm sự kết hợp rẻ nhất của các phòng xung quanh vấn đề ba lô 01 rất nổi tiếng. Các vật phẩm (N) và trọng lượng (W) trong bài toán chiếc ba lô lỏng lẻo ánh xạ tới tập hợp các phòng vật lý trong khách sạn và các kết hợp phòng khác nhau có thể có (bắt đầu từ 0 và dẫn đến chiếm chỗ được yêu cầu). Tuy nhiên, có một số hạn chế duy nhất trong trường hợp của chúng tôi cần xử lý đặc biệt.

  1. Vật phẩm phụ / Phòng ảo: Mỗi vật phẩm là duy nhất trong bài toán đeo ba lô 0 nhưng1 không đúng trong trường hợp của chúng tôi. Một phòng vật lý (vật phẩm) cần được xem xét với tất cả các nghề nghiệp và thuế quan có thể để đảm bảo tính duy nhất trong bộ vật phẩm. Điều này dẫn đến việc tạo ra các phòng ảo cho mỗi phòng vật lý. N trong bài toán ba lô 011 thực sự ánh xạ tới tập hợp các phòng ảo trong trường hợp của chúng tôi.
  2. Đảm bảo phòng vật lý được sử dụng một lần: Đây là hàm ý trực tiếp của (1). Mặc dù chúng tôi sử dụng các phòng ảo cho tất cả các tính toán và quyết định trong thuật toán, nhưng cần phải đảm bảo rằng một phòng vật lý chỉ được sử dụng một lần cho mỗi tổ hợp phòng và cần tìm sự thay thế tốt nhất trong trường hợp có bất kỳ xung đột nào.
  3. Các trường hợp cạnh trong khi lấp đầy phần còn lại: Chúng tôi phải xử lý một vài trường hợp cạnh trong khi đề cập đến các vấn đề phụ đã được giải quyết. ví dụ. rất nhiều khách sạn don lồng cho phép đặt phòng với phòng chỉ có trẻ em. Chúng tôi cũng cần xử lý các trường hợp chúng tôi đã hoàn thành việc chiếm chỗ của người lớn thông qua một phòng ảo và chỉ còn lại trẻ em.

Các bước chính để xây dựng thuật toán

  1. Nhận kết quả của yêu cầu tìm kiếm chuyển đổi.
  2. Tạo ma trận 2 chiều T với tất cả các phòng có thể có là cột (W) và phòng ảo dưới dạng hàng (N).
  3. Tại mỗi ô của ma trận 2 chiều, chúng tôi xem xét hai khả năng - để chọn phòng ảo tương ứng làm một phần của giải pháp tối ưu hoặc loại bỏ nó. Chúng tôi tính toán chi phí liên quan đến và không có phòng ảo đó và chọn giá rẻ nhất. Mỗi ô ma trận lưu trữ các thuộc tính chính của các phòng được sử dụng để đáp ứng sự chiếm chỗ của ô đó.

Ma trận được điền theo kiểu từ dưới lên bằng cách sử dụng mối quan hệ lặp lại dưới đây:

Hình (6): Công thức tính toán

4. Trả về kết quả sau khi đi qua ma trận.

Thí dụ:

Hình (7): Chi tiết cấp độ phòng / thuế quan

Đối với các tham số đầu vào ở trên, ma trận 2 chiều sau sẽ được tạo. Cột màu cam ghi lại giá tương ứng với từng phòng ảo theo cấu hình được thực hiện bởi chủ khách sạn.

Hình (8): Ma trận 2D hiển thị các mục cho 3 người lớn và 2 trẻ em. Null Entries đã được đánh dấu là ‘X.

Các ô được tô màu xanh lục cho thấy sự kết hợp các phòng rẻ nhất cho các tiêu chí tìm kiếm được chỉ định. Số nhận dạng phòng được đề cập trong ô mô tả những phòng nào sẽ được xem xét và các chỉ số của chúng xác định công suất phòng của mỗi phòng. Các ô được tô màu xanh lam là các ô được sử dụng để tính toán các ô màu xanh theo cách đệ quy (sử dụng mối quan hệ lặp lại được đề cập ở trên).

Thuật toán này hoạt động khá tốt trong sản xuất mà không ảnh hưởng đến độ trễ phần trăm thứ 99 của API tìm kiếm của chúng tôi. Ngay cả sau khi lưu trữ các kết quả đề xuất này, chúng tôi vẫn xử lý khoảng 15K kết hợp khách sạn duy nhất mỗi phút.

Đặc biệt cảm ơn Ajay Singh và Abhijeet Sharad đã giúp soạn thảo blog này.