{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"![pipline.JPG](attachment:e640547a-7025-4cb2-80ee-cbfa4fb310c0.JPG)","metadata":{},"attachments":{"e640547a-7025-4cb2-80ee-cbfa4fb310c0.JPG":{"image/jpeg":"/9j/4AAQSkZJRgABAQEAeAB4AAD/4RD0RXhpZgAATU0AKgAAAAgABAE7AAIAAAAOAAAISodpAAQAAAABAAAIWJydAAEAAAAcAAAQ0OocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlhc3NlciBzaHJpZWYAAAWQAwACAAAAFAAAEKaQBAACAAAAFAAAELqSkQACAAAAAzMzAACSkgACAAAAAzMzAADqHAAHAAAIDAAACJoAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMDIyOjA4OjA1IDE1OjExOjM0ADIwMjI6MDg6MDUgMTU6MTE6MzQAAAB5AGEAcwBzAGUAcgAgAHMAaAByAGkAZQBmAAAA/+ELIGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLz48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdGVEYXRlPjIwMjItMDgtMDVUMTU6MTE6MzQuMzM0PC94bXA6Q3JlYXRlRGF0ZT48L3JkZjpEZXNjcmlwdGlvbj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+PGRjOmNyZWF0b3I+PHJkZjpTZXEgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOmxpPnlhc3NlciBzaHJpZWY8L3JkZjpsaT48L3JkZjpTZXE+DQoJCQk8L2RjOmNyZWF0b3I+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNr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AJDfDKqniXUlQBVEMQAHaurrlfDn/I0an/1xjrqq3l09F+R5Uvjl6sKKKKkkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACud8a/8gWD/AK+4v510Vc741/5AsH/X3F/Orp/GhPYgoooriPfCiiigAooooATw5/yNGp/9cY66quV8Of8AI0an/wBcY66quyXT0X5Hhz+OXqwoooqSQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK53xtxoUTdluoiT6DNdFVXUrCLU9Oms7gfJKuM+h7H8DVQdpJsT2MCis1p7nRHFrraFUHyx3YGUcdsnsavxTRToHhkWRT0ZWyK5p05Q3PZp1oVFeLH0UUVBsFFIzBVJYgAdSTWe+qfaJvsujxm9uT2j5RPdm6AVcYSm7JGc6kKavJmh4b58TaqRyFjiBPocZrqqytA0c6TZP5ziW6nfzJ5AOreg9h0rVrpla9keK3dt9woooqQCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm9U8a2umaxLpq6Vq9/PCqtIbGzMyqG6ZIPFdJXmvibw/q83jS8vrbR9TvLaaKNUex1RLXlQc7gTk1hWlOMU4nqZZRw9arKNd2VtNUtbrq2vPqd2uqafc2LyXMkcSIitPFclVaEEZAkU/d/GsO60rwtPqYtra/t7PUHG4Q210qyMMZzszzx7Vn6r4a1PUNS0ySC3aK0vIo4tUillDsixncuTn5ieVJHrVPUdA1y88XxXP9iQpFa36SJdwvEpkh6YI+8SO+SPxpe3qw2RvDAYSpq6qWje606W89b7dLMvafYW+owRyWXiG4hMrSLHFchNz7DhiB1IFOlsbOGKGW/wDGMMUdwcQt5sSLL/uknn8Kz49C8Q6ZFpFzaaULqa2mu1kgNwiFVlPytnOMe3Ws+/8AC/iO48N2OltoVvP/AKE6NL5kQeCbeT945JXHZf0pfWaqXw6+np5HQsuwspq1e0W/5lteXn2SfnfQ3Gh8LQanc2d9qT6hdWcQlkgluVAAP1IGe/Xjj1rqYb7RtPlgsI7iytJplDRW3mIruPULnJ/CuFv/AAtqxur82+ipIb3SoYROJIw0cq53KcnJJ45HHHWl1Hwrq0mo3sKaJBd/b5IZI9UkmUNZhVUFcH5uCpxt9aHiKz3X5k/2dgW1arbTvH+7fr0u9N3bQ73+29K+3Cy/tOz+1Fygg+0Lv3DkjbnOeelXq89Pg66N7fXjadG102tR3EU5KbzCAuSDnIHB46+1ehVpTlKV+ZWPMxdChS5fYz5r77b6dvX8AooorU4QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsfxVq8+heHLm/tIo5Zo9oRJSQpJYDnH1rYrJ8TaPJr/h+406G4W2kl2lZWTcFIIPTIz0qJ35Xy7nRhfZ+3h7X4bq/pfUytO8SaxbaoNP8T6fbpJNbtcWz6czyhwuNy7SM7uR0qrefEq0i0e+urfSdSFzZuiyWtxb7HAc8NjJ44NSp4P1W7M0+ta79ovBavbWstvb+SIA2MtjJyeB3qnD8O7sWWppcatE9xqEESNKlqECvGxIbAPOc855965n7e1l+n9bnuxjlblzVWr+7ouaz11tpe3Lv1utDXfxvZwajZ2d3p2qW5u9gWeW0KxKzDIUsT1+ma6WuFfwFqdzqaXd9rkdwEniuArWoyrqACFOflU46D9a7qtqbqO/Ojy8dDCxUPq8ru2u+/wA0gooorY84KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkDKWKggkdRnpS1kWWmXFv4q1PUJGUwXUcSxgNyCoIOR+NJtqxpCMZKTbtZaeeq0/X5GvRRRTMwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsi21C6k8XX1g4/wBFht45I/l/iJOea1JZo4IzJM6xoOrMcAVRXWbM6rc2RbY9vCszyNgLtbpz+FRLdanRRi3GVo30+7Va/p8zRopEdZEDoQysMgjvS1ZzhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFYWr6zOt2dP0vb9oAzLM4yIh9O5rLOnyyHdcajeSuep83aPwArJ1NbJXM3USdkdjRXHf2YP+fy8/7/Gj+zB/z+Xn/f40vaS7C9o+x2NFcd/Zg/5/Lz/v8aP7MH/P5ef9/jR7SXYPaPsdjRXHf2YP+fy8/wC/xo/s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FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBj+LP+RT1D/rl/UVWtv8Aj0h/3F/lWprNkdR0W7tEOGmiZVJ9ccfrWBo18t3YqjfJcQARzRnqjDiuql8BhU+I0KKKK0ICiiigAqjbf8jxa/8AXm//AKEKukgAk8AdTVLQf+Jp4kn1KHm0tofs8b9ncnLEew6UnpFsF8SOqoooriOoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArH1Xw7b6hOLuCR7S9UYE8Xf2YdCKXxJ4m0/wtpYvdS8597iKC3tojJNcSHokaDlmPpWNafE7Q7rQrrU3h1C0NnPHBc2l3amK4hZ2CruRjwDkHOelVGTi7oTSasySS38Qaf/rIIdRiH8UJ2P8AkeKjOsyx/wDHxpGpR+pFuWA/EVujxNoR0ybURrWnfYYHKTXX2pPKjYHBVmzgHPGCaqz+MtGjm05ILlbyPUkle3ntGWWNhGu5vmBx09K2VbujP2XZmUNfifiGx1CU+iWrHFPW81W6O2y0WdSf47kiNR/WtS08Y6Fc6fp13LqVtZDUhm0ivJkiklPoqk8n2Gasy+JNDg1AWE2s6fHeNJ5QtnukEhfGdu3Oc4IOPej2y6IXsvMyo/DN9fkHXL0eT1NtbDap9i3U10dvbxWtukFvGscSDCqowAKpy+INGgv2sZ9WsY7tCoa3e5QSKWOFypOeT09adHrelS6s+lRanZvqMa73s1uFMyr6lM5A/CspTlLc0jFR2L1FFFQUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQByXjrS9Wnk0fWdAtI7+70e6M/2J5BH9oRkKMqseA3PBPFc9rWneLPGXgvVYdX8OW9g11dW5hsPPjklMayKXMjg7TwDxnpXp1FAHkeqeENY0oa9HoHhSyvbC61G3kSxxAqvEI9rtGH+VWDdyPXrUHhvwP4g0+PRo59KMC2c2oF1E8bBFlTEeMYzk8cAfQV3PjvxFq+gWemJ4dtbO5vtQvktI1vXZYxlWOSV5/hrO0vx3qtsur2fi3RGGq6XHHMYNFVrr7RG+dpjXAbOQQc4oA8z1v4WeK7qTRmXT5p4zp8VrMkMttutWV2JJMgPHzZynPH0rqbr4cXs1x4hu5tIjub6S+snsbuQxmQpGqByGzleQfTNa978YrJdL0y803QtYuDe6j9hlga0Ky27Dkhlz97HQZ559K3Lb4h6dP4yTw5NpusWVzLuEFxeWTRQTlRkhGPJ4z2xxQB47PcWcfji40Y2un3Gpr4lin+3+cv2qRWcHyxGRvIUdT9zjit7w/8ADfxHYfFxtQvbef7HHfS3aX8clvsdWyQp+XzjwcEE4r2I6Nph1MakdOtDfAYF15C+b0x9/GenvV2gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5jxx4Z1HxLZ6f/AGLqcOm3theLdxTTW/nLkKRgrkf3qwJfhxrt3pepTXnikN4gvnhJvorXZEscRyI/LDcqecjPOa9GooA8yg+FepWehrbWWu28V7Hq66pHOLECNW24ZfLBAxycY6VJpXww1S08YWWual4givvsN3LNCrWYEhSRWBRpMknBPA6D0r0migAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k="}}},{"cell_type":"markdown","source":"The Training, the lag_1 and lag_avg features are based on [This](https://www.kaggle.com/code/ragnar123/amex-lgbm-dart-cv-0-7977) amazing notebook.","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19"}},{"cell_type":"markdown","source":"The model pipeline: The red dot line represents the flow of the\nTest dataset. The black solid line represents the flow of the Challenge\ndata, including training , validation dataset \n\n\n* **Step 1**  -Feature Selection by lightGBM:\nThe goal is to limit the number of features used in the final model based on features’ importance and\ncorrelation with others. The averaged importance score for each feature\nwas calculated by using lightGBM .\n\n* **Step 2** - Extract features by neural networks:\nAfter obtaining important features, this pipeline will generate new features from those selected\nfeatures, by extracting the last hidden layers from a neural network built\non a training set. \n\n* **Step 3** - LightGBM tuning and testing: \nAfter combining selected features and extracted features from step 1 and 2, the transformed training\nand validation data will be used for training and hyperparameter tuning.\nThe tuned model will be saved for later deployment.\n\n","metadata":{}},{"cell_type":"markdown","source":"# Import Library","metadata":{}},{"cell_type":"code","source":"# ====================================================\n# Library\n# ====================================================\nimport os\nimport gc\nimport warnings\nwarnings.filterwarnings('ignore')\nimport random\nimport scipy as sp\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport plotly.graph_objects as go\nimport joblib\nimport itertools\npd.set_option('display.max_rows', 500)\npd.set_option('display.max_columns', 500)\npd.set_option('display.width', 1000)\nfrom tqdm.auto import tqdm\nfrom sklearn.model_selection import StratifiedKFold, train_test_split\nfrom sklearn.preprocessing import LabelEncoder\nimport lightgbm as lgb\nfrom itertools import combinations\n\n# Modeling libraries\n# from .head import *\nfrom lightgbm import LGBMClassifier\nimport lightgbm as lgb\nfrom scipy.stats import randint as sp_randint\nfrom scipy.stats import uniform as sp_uniform\nimport sklearn\nfrom sklearn.model_selection import RandomizedSearchCV, GridSearchCV\nfrom sklearn.metrics import confusion_matrix, f1_score\nfrom sklearn.model_selection import PredefinedSplit\nfrom keras.models import Sequential\nfrom keras.wrappers.scikit_learn import KerasClassifier\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.metrics import precision_recall_curve\nfrom sklearn.metrics import auc\nfrom matplotlib import pyplot\nimport keras\nfrom keras import layers\nimport joblib\n\ninput_dir = '/content/data/'\nseed = 42\nn_folds = 5\ntarget = 'target'\nboosting_type = 'dart'\nmetric = 'binary_logloss'\n","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:44:11.064356Z","iopub.execute_input":"2022-08-10T00:44:11.064963Z","iopub.status.idle":"2022-08-10T00:44:19.991676Z","shell.execute_reply.started":"2022-08-10T00:44:11.064864Z","shell.execute_reply":"2022-08-10T00:44:19.990645Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Features Extraction","metadata":{}},{"cell_type":"code","source":"# ====================================================\n# Get the difference\n# ====================================================\ndef get_difference(data, num_features):\n    df1 = []\n    customer_ids = []\n    for customer_id, df in tqdm(data.groupby(['customer_ID'])):\n        # Get the differences\n        diff_df1 = df[num_features].diff(1).iloc[[-1]].values.astype(np.float32)\n        # Append to lists\n        df1.append(diff_df1)\n        customer_ids.append(customer_id)\n    # Concatenate\n    df1 = np.concatenate(df1, axis = 0)\n    # Transform to dataframe\n    df1 = pd.DataFrame(df1, columns = [col + '_diff1' for col in df[num_features].columns])\n    # Add customer id\n    df1['customer_ID'] = customer_ids\n    return df1\n\n# ====================================================\n# Read & preprocess data and save it to disk\n# ====================================================\ndef read_preprocess_data():\n    train = pd.read_parquet('/content/train.parquet')\n    features = train.drop(['customer_ID', 'S_2'], axis = 1).columns.to_list()\n    cat_features = [\n        \"B_30\",\n        \"B_38\",\n        \"D_114\",\n        \"D_116\",\n        \"D_117\",\n        \"D_120\",\n        \"D_126\",\n        \"D_63\",\n        \"D_64\",\n        \"D_66\",\n        \"D_68\",\n    ]\n    num_features = [col for col in features if col not in cat_features]\n    print('Starting training feature engineer...')\n    train_num_agg = train.groupby(\"customer_ID\")[num_features].agg(['mean', 'std', 'min', 'max', 'last'])\n    train_num_agg.columns = ['_'.join(x) for x in train_num_agg.columns]\n    train_num_agg.reset_index(inplace = True)\n    train_cat_agg = train.groupby(\"customer_ID\")[cat_features].agg(['count', 'last', 'nunique'])\n    train_cat_agg.columns = ['_'.join(x) for x in train_cat_agg.columns]\n    train_cat_agg.reset_index(inplace = True)\n    train_labels = pd.read_csv('/content/train_labels.csv')\n    # Transform float64 columns to float32\n    cols = list(train_num_agg.dtypes[train_num_agg.dtypes == 'float64'].index)\n    for col in tqdm(cols):\n        train_num_agg[col] = train_num_agg[col].astype(np.float32)\n    # Transform int64 columns to int32\n    cols = list(train_cat_agg.dtypes[train_cat_agg.dtypes == 'int64'].index)\n    for col in tqdm(cols):\n        train_cat_agg[col] = train_cat_agg[col].astype(np.int32)\n    # Get the difference\n    train_diff = get_difference(train, num_features)\n    train = train_num_agg.merge(train_cat_agg, how = 'inner', on = 'customer_ID').merge(train_diff, how = 'inner', on = 'customer_ID').merge(train_labels, how = 'inner', on = 'customer_ID')\n    del train_num_agg, train_cat_agg, train_diff\n    gc.collect()\n    # Save files to disk\n    train.to_parquet('/content/gdrive/MyDrive/Amex/train_fe.parquet')\n\n    test = pd.read_parquet('/content/test.parquet')\n    print('Starting test feature engineer...')\n    test_num_agg = test.groupby(\"customer_ID\")[num_features].agg(['mean', 'std', 'min', 'max', 'last'])\n    test_num_agg.columns = ['_'.join(x) for x in test_num_agg.columns]\n    test_num_agg.reset_index(inplace = True)\n    test_cat_agg = test.groupby(\"customer_ID\")[cat_features].agg(['count', 'last', 'nunique'])\n    test_cat_agg.columns = ['_'.join(x) for x in test_cat_agg.columns]\n    test_cat_agg.reset_index(inplace = True)\n    # Transform float64 columns to float32\n    cols = list(test_num_agg.dtypes[test_num_agg.dtypes == 'float64'].index)\n    for col in tqdm(cols):\n        test_num_agg[col] = test_num_agg[col].astype(np.float32)\n    # Transform int64 columns to int32\n    cols = list(test_cat_agg.dtypes[test_cat_agg.dtypes == 'int64'].index)\n    for col in tqdm(cols):\n        test_cat_agg[col] = test_cat_agg[col].astype(np.int32)\n    # Get the difference\n    test_diff = get_difference(test, num_features)\n    test = test_num_agg.merge(test_cat_agg, how = 'inner', on = 'customer_ID').merge(test_diff, how = 'inner', on = 'customer_ID')\n    del test_num_agg, test_cat_agg, test_diff\n    gc.collect()\n    # Save files to disk\n    test.to_parquet('/content/drive/MyDrive/Amex/test_fe.parquet')\n\n# Read & Preprocess Data\n#read_preprocess_data()","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:38:08.447286Z","iopub.execute_input":"2022-08-10T00:38:08.447749Z","iopub.status.idle":"2022-08-10T00:38:08.645497Z","shell.execute_reply.started":"2022-08-10T00:38:08.447661Z","shell.execute_reply":"2022-08-10T00:38:08.644396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_fe = pd.read_parquet('../input/datafe/test_fe.parquet')\ntrain_fe = pd.read_parquet('../input/datafe/train_fe.parquet')","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:46:05.218033Z","iopub.execute_input":"2022-08-10T00:46:05.218508Z","iopub.status.idle":"2022-08-10T00:46:41.755090Z","shell.execute_reply.started":"2022-08-10T00:46:05.218472Z","shell.execute_reply":"2022-08-10T00:46:41.754040Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Add new features ","metadata":{}},{"cell_type":"code","source":"# def train_and_evaluate(train, test):\n# Label encode categorical features\ncat_features = [\n    \"B_30\",\n    \"B_38\",\n    \"D_114\",\n    \"D_116\",\n    \"D_117\",\n    \"D_120\",\n    \"D_126\",\n    \"D_63\",\n    \"D_64\",\n    \"D_66\",\n    \"D_68\"\n]\ncat_features = [f\"{cf}_last\" for cf in cat_features]\nfor cat_col in cat_features:\n    encoder = LabelEncoder()\n    train_fe[cat_col] = encoder.fit_transform(train_fe[cat_col])\n    test_fe[cat_col] = encoder.transform(test_fe[cat_col])","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:46:52.528728Z","iopub.execute_input":"2022-08-10T00:46:52.529245Z","iopub.status.idle":"2022-08-10T00:46:54.126045Z","shell.execute_reply.started":"2022-08-10T00:46:52.529205Z","shell.execute_reply":"2022-08-10T00:46:54.125025Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Round last float features to 2 decimal place\nnum_cols = list(train_fe.dtypes[(train_fe.dtypes == 'float32') | (train_fe.dtypes == 'float64')].index)\nnum_cols = [col for col in num_cols if 'last' in col]\nfor col in num_cols:\n    train_fe[col + '_round2'] = train_fe[col].round(2)\n    test_fe[col + '_round2'] = test_fe[col].round(2)","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:46:57.387608Z","iopub.execute_input":"2022-08-10T00:46:57.388633Z","iopub.status.idle":"2022-08-10T00:46:57.987198Z","shell.execute_reply.started":"2022-08-10T00:46:57.388586Z","shell.execute_reply":"2022-08-10T00:46:57.986022Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Get the difference between last and mean\nnum_cols = [col for col in train_fe.columns if 'last' in col]\nnum_cols = [col[:-5] for col in num_cols if 'round' not in col]\nfor col in num_cols:\n    try:\n        train_fe[f'{col}_last_mean_diff'] = train_fe[f'{col}_last'] - train_fe[f'{col}_mean']\n        test_fe[f'{col}_last_mean_diff'] = test_fe[f'{col}_last'] - test_fe[f'{col}_mean']\n    except:\n        pass\n# Transform float64 and float32 to float16\nnum_cols = list(train_fe.dtypes[(train_fe.dtypes == 'float32') | (train_fe.dtypes == 'float64')].index)\nfor col in tqdm(num_cols):\n    train_fe[col] = train_fe[col].astype(np.float16)\n    test_fe[col] = test_fe[col].astype(np.float16)\n# Get feature list\nfeatures = [col for col in train_fe.columns if col not in ['customer_ID', target]]","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:47:02.149352Z","iopub.execute_input":"2022-08-10T00:47:02.149743Z","iopub.status.idle":"2022-08-10T00:56:23.197803Z","shell.execute_reply.started":"2022-08-10T00:47:02.149695Z","shell.execute_reply":"2022-08-10T00:56:23.196804Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 1 :  \n**Feature Selection by lightGBM**","metadata":{}},{"cell_type":"code","source":"X = train_fe.drop(['customer_ID','target'], axis=1)\ny = train_fe['target']\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.1, random_state=1)","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:57:23.011475Z","iopub.execute_input":"2022-08-10T00:57:23.011983Z","iopub.status.idle":"2022-08-10T00:57:31.860492Z","shell.execute_reply.started":"2022-08-10T00:57:23.011947Z","shell.execute_reply":"2022-08-10T00:57:31.859257Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def feature_importance_lgb(y_train, X_train, nfolds=5, nrepeats=2):\n    \"\"\" By using lightGBM to get feature importance\n    Args:\n        y_train: series: data response\n        X_train: Dataframe df:\n        nfolds: int: fold number\n        nrepeats: int: number of repeats for CV\n\n    \"\"\"\n\n    folds = sklearn.model_selection.RepeatedKFold(n_splits=nfolds, n_repeats=nrepeats)\n    feature_importance_df = pd.DataFrame()\n    model0 = LGBMClassifier(is_unbalance=True)\n    for fold, (trn_idx, val_idx) in enumerate(folds.split(X_train, y_train)):\n        print(\"fold n°{}\".format(fold))\n        model0.fit(X_train.iloc[trn_idx], y_train.iloc[trn_idx],\n                    eval_set=[(X_train.iloc[val_idx], y_train.iloc[val_idx])], early_stopping_rounds=150)\n        fold_importance_df = pd.DataFrame()\n        fold_importance_df[\"feature\"] = X_train.columns\n        fold_importance_df[\"importance\"] = model0.booster_.feature_importance()\n        fold_importance_df[\"fold\"] = fold + 1\n        feature_importance_df = pd.concat([feature_importance_df, fold_importance_df], axis=0)\n    ft_importance=pd.DataFrame(index=X.columns)\n    ft_importance[\"Importance_Fold\"+str(fold)]=model0.feature_importances_\n    ft_importance['avg']=ft_importance.mean(axis=1)\n    ft_importance=ft_importance.avg.nlargest(50).sort_values(ascending=True)\n    pal=sns.color_palette(\"YlGnBu\", 65).as_hex()\n    fig=go.Figure()\n    for i in range(len(ft_importance.index)):\n        fig.add_shape(dict(type=\"line\", y0=i, y1=i, x0=0, x1=ft_importance[i], \n                          line_color=pal[::-1][i],opacity=0.8,line_width=4))\n    fig.add_trace(go.Scatter(x=ft_importance, y=ft_importance.index, mode='markers', \n                            marker_color=pal[::-1], marker_size=8,\n                            hovertemplate='%{y} Importance = %{x:.0f}<extra></extra>'))\n    temp=dict(layout=go.Layout(font=dict(family=\"Franklin Gothic\", size=12), \n                              height=500, width=1000))\n    fig.update_layout(template=temp,title='LGBM Feature Importance<br>Top 50', \n                      margin=dict(l=150,t=80),\n                      xaxis=dict(title='Importance', zeroline=False),\n                      yaxis_showgrid=False, height=1000, width=800)\n    fig.show()\n    all_features = feature_importance_df[[\"feature\", \"importance\"]].groupby(\"feature\").mean().sort_values(\n        by=\"importance\", ascending=False)\n    all_features.reset_index(inplace=True)\n    return all_features , all_features.describe()\n\nfeature_importance_lgb(y_train, X_train, nfolds=5, nrepeats=1)","metadata":{"execution":{"iopub.status.busy":"2022-08-10T00:57:37.251206Z","iopub.execute_input":"2022-08-10T00:57:37.251554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train =train_fe[Final_features]\ntest_features = [col for col in train.columns if col not in ['target']]\ntest = test_fe[test_features]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Check missing data :  \nlightgbm can handle missing values...But Neural Network Not!","metadata":{}},{"cell_type":"code","source":"def missing_data(data):\n    total = data.isnull().sum().sort_values(ascending = False)\n    percent = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending = False)\n    return pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])\n\n#missing_data(train)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Fill NAN values by median...","metadata":{}},{"cell_type":"code","source":"def fill_na(train,test):\n    train[train.columns] = train[train.columns].apply(pd.to_numeric, errors='coerce')\n    test[test.columns] = test[test.columns].apply(pd.to_numeric, errors='coerce')\n    train = train.fillna(train.median())\n    test = test.fillna(test.median())\n    \n#def fill_na(train,test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Save Selected data to feed the NN....","metadata":{}},{"cell_type":"code","source":"# from google.colab import drive\n# drive.mount('/content/drive')\n# train.to_csv('/content/drive/MyDrive/Amex/train_lgbm.csv')\n# test.to_csv('/content/drive/MyDrive/Amex/test_lgbm.csv')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 2:  \n**Extract features by neural networks**","metadata":{}},{"cell_type":"code","source":"def parameter_ANN(self, X_train, y_train, X_val, y_val, neuron_layer_1):\n    \"\"\" Applying Gridsearch on turning neural net's parameters on validation dataset. It will write the final model\n    in a txt file, whose hidden layers will be used to extract new features.\n    Args:\n        X_train: Dataframe df: train set\n        y_train: series: train set response\n        X_val: Dataframe df: validation set\n        y_val: series: validation set response\n        neuron_layer_1: int: the number of neurons of the input layers. This number is decided by the number of selected features \n    \"\"\"\n    X_train = X_train.drop(X_train.select_dtypes(include='category'), axis=1)\n    X_val = X_val.drop(X_val.select_dtypes(include='category'), axis=1)\n\n    X_train = np.asarray(X_train)\n    y_train = np.asarray(y_train)\n    X_val = np.asarray(X_val)\n    y_val = np.asarray(y_val)\n\n    ## standaderization\n    scalar = StandardScaler()\n    scalar.fit(X_train)\n    transformed_X_train = scalar.transform(X_train)\n    transformed_X_val = scalar.transform(X_val)\n\n    ## parameter choice after hyperparameter tuning\n    neuron = [ 64]\n    dropout_rate = [0.2]\n    activations = ['relu']\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## baseline model\ndef create_baseline(dropout_rate=0.0, neurons=10, activation1='relu', activation2='relu'):\n    # create model\n    model = Sequential(\n        [\n            layers.Dense(neuron_layer_1, activation=activation1, name=\"layer1\"),\n            layers.Dropout(dropout_rate),\n            layers.Dense(neurons, activation=activation2, name=\"layer2\"),\n            layers.Dense(1, activation='sigmoid', name=\"layer3\")\n        ]\n    )\n    # Compile model\n    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n    return model \n\n#Fitting the data to the training dataset\nhistory = model.fit(transformed_X_train,y_train, validation_data=(transformed_X_val, y_val), batch_size=256, epochs=20 , verbose=2)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# save weights and bias\nfrom google.colab import drive\ndrive.mount('/content/drive')\nMODEL_PATH = './drive/My Drive/Amex/model.h5'\n\n# Now save model in drive\nmodel.save(MODEL_PATH)\nprint(model.summary())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":" def feature_generation_NN( X_train, X_val, X_test, y_test, evaluation=None):\n        \"\"\" Get hidden layers from the saved NN model, and use it to generate new features on train, test, validation and\n        evaluation dataset if it is applicable\n         Args:\n            X_train: Dataframe df: train set\n            X_val: Dataframe df: validation set\n            X_test: Dataframe df: test set\n            y_test: series: validation set response\n            evaluation: DataFrame df: evaluation dataset\n        return:\n             the train and validation with new added features\n         \"\"\"\n        # import the turned model\n        # model = keras.models.load_model(\"nn_model.h5\")\n\n\n        index_train = X_train.index\n        index_val = X_val.index\n\n        X_train = X_train.drop(X_train.select_dtypes(include='category'), axis=1)\n        X_val = X_val.drop(X_val.select_dtypes(include='category'), axis=1)\n\n        X_train = np.asarray(X_train)\n        X_val = np.asarray(X_val)\n        y_test = np.asarray(y_test)\n\n        ## standaderization\n        scalar = StandardScaler()\n        scalar.fit(X_train)\n        transformed_X_train = scalar.transform(X_train)\n        transformed_X_val = scalar.transform(X_val)\n\n\n        ## feature extraction\n        extractor = keras.Model(inputs=model.inputs,\n                                outputs=model.layers[2].output)\n        features_train = extractor.predict(transformed_X_train)\n        features_val = extractor.predict(transformed_X_val)\n\n        col = [\"val\" + str(i) for i in range(model.layers[2].output_shape[1])]\n        feature_train = pd.DataFrame(data=features_train, index=index_train, columns=col)\n        feature_val = pd.DataFrame(data=features_val, index=index_val, columns=col)\n\n        return  feature_train, feature_val","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 3 : \n**LightGBM tuning and testing**","metadata":{}},{"cell_type":"markdown","source":"Now I will retrieve **feature_train, feature_val** into a dataframe then merge it with the lgbm featured ...finally gather train and val data into one dataframe agian.","metadata":{}},{"cell_type":"code","source":"feature_train = pd.DataFrame(data=features_train, index=index_train, columns=col)\nfeature_val = pd.DataFrame(data=features_val, index=index_val, columns=col)\n\nnn_features =pd.concat([feature_train, feature_val], axis=0) # merge back all Train data agian\n#Merge NN features + lgbm fetures\ntrain_data_all = pd.merge(train, nn_features, left_index=True, right_index=True) ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Test data feature extraction and merge","metadata":{}},{"cell_type":"code","source":"index_test = test.index\nX_test = test.drop(test.select_dtypes(include='category'), axis=1) \n## standaderization\n\nscalar = StandardScaler()\nX_test = np.asarray(test) \nscalar.fit(X_test)\ntransformed_X_test = scalar.transform(X_test) \n\nfeatures_test = extractor.predict(transformed_X_test) \nfeatures_test = pd.DataFrame(data=features_test, index=index_test, columns=col)\nfeature_test_all=pd.merge(features_test, test_set, left_index=True, right_index=True)\n\n# #save test data\nfeature_test_all.to_parquet('/content/drive/MyDrive/Amex/test_data_merged.parquet')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Final setp... join  `['customer_ID'] ` column agian for Submission","metadata":{}},{"cell_type":"code","source":"train = pd.merge(train, train_fe['customer_ID'], left_index=True, right_index=True)\ntest = pd.merge(test, test_fe['customer_ID'], left_index=True, right_index=True)\n\nfirst_column = train.pop('customer_ID')\ntrain.insert(0, 'customer_ID', first_column)\n\nfirst_column = test.pop('customer_ID')\ntest.insert(0, 'customer_ID', first_column)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Modeling","metadata":{}},{"cell_type":"code","source":"class CFG:\n    input_dir = '/content/data/'\n    seed = 42\n    n_folds = 4\n    target = 'target'\n    boosting_type = 'dart'\n    metric = 'binary_logloss'\n\n# ====================================================\n# Seed everything\n# ====================================================\ndef seed_everything(seed):\n    random.seed(seed)\n    np.random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n\n# ====================================================\n# Amex metric\n# ====================================================\ndef amex_metric(y_true, y_pred):\n    labels = np.transpose(np.array([y_true, y_pred]))\n    labels = labels[labels[:, 1].argsort()[::-1]]\n    weights = np.where(labels[:,0]==0, 20, 1)\n    cut_vals = labels[np.cumsum(weights) <= int(0.04 * np.sum(weights))]\n    top_four = np.sum(cut_vals[:,0]) / np.sum(labels[:,0])\n    gini = [0,0]\n    for i in [1,0]:\n        labels = np.transpose(np.array([y_true, y_pred]))\n        labels = labels[labels[:, i].argsort()[::-1]]\n        weight = np.where(labels[:,0]==0, 20, 1)\n        weight_random = np.cumsum(weight / np.sum(weight))\n        total_pos = np.sum(labels[:, 0] *  weight)\n        cum_pos_found = np.cumsum(labels[:, 0] * weight)\n        lorentz = cum_pos_found / total_pos\n        gini[i] = np.sum((lorentz - weight_random) * weight)\n    return 0.5 * (gini[1]/gini[0] + top_four)\n\n# ====================================================\n# LGBM amex metric\n# ====================================================\ndef lgb_amex_metric(y_pred, y_true):\n    y_true = y_true.get_label()\n    return 'amex_metric', amex_metric(y_true, y_pred), True\n\n    # Get feature list\n    features = [col for col in train.columns if col not in ['customer_ID', CFG.target]]\n    params = {\n        'objective': 'binary',\n        'metric': CFG.metric,\n        'boosting': CFG.boosting_type,\n        'seed': CFG.seed,\n        'num_leaves': 100,\n        'learning_rate': 0.01,\n        'feature_fraction': 0.20,\n        'bagging_freq': 10,\n        'bagging_fraction': 0.50,\n        'n_jobs': -1,\n        'lambda_l2': 2,\n        'min_data_in_leaf': 40,\n        }\n    # Create a numpy array to store test predictions\n    test_predictions = np.zeros(len(test))\n    # Create a numpy array to store out of folds predictions\n    oof_predictions = np.zeros(len(train))\n    kfold = StratifiedKFold(n_splits = CFG.n_folds, shuffle = True, random_state = CFG.seed)\n    for fold, (trn_ind, val_ind) in enumerate(kfold.split(train, train[CFG.target])):\n        print(' ')\n        print('-'*50)\n        print(f'Training fold {fold} with {len(features)} features...')\n        x_train, x_val = train[features].iloc[trn_ind], train[features].iloc[val_ind]\n        y_train, y_val = train[CFG.target].iloc[trn_ind], train[CFG.target].iloc[val_ind]\n        lgb_train = lgb.Dataset(x_train, y_train)\n        lgb_valid = lgb.Dataset(x_val, y_val)\n        model = lgb.train(\n            params = params,\n            train_set = lgb_train,\n            num_boost_round = 1000,\n            valid_sets = [lgb_train, lgb_valid],\n            early_stopping_rounds = 1000,\n            verbose_eval = 500,\n            feval = lgb_amex_metric\n            )\n        # Save best model\n        joblib.dump(model, f'/content/drive/MyDrive/Amex/Models/lgbm_{CFG.boosting_type}_fold{fold}_seed{CFG.seed}.pkl')\n        # Predict validation\n        val_pred = model.predict(x_val)\n        # Add to out of folds array\n        oof_predictions[val_ind] = val_pred\n        # Predict the test set\n        test_pred = model.predict(test[features])\n        test_predictions += test_pred / CFG.n_folds\n        # Compute fold metric\n        score = amex_metric(y_val, val_pred)\n        print(f'Our fold {fold} CV score is {score}')\n        del x_train, x_val, y_train, y_val, lgb_train, lgb_valid\n        gc.collect()\n    # Compute out of folds metric\n    score = amex_metric(train[CFG.target], oof_predictions)\n    print(f'Our out of folds CV score is {score}')\n    # Create a dataframe to store out of folds predictions\n    oof_df = pd.DataFrame({'customer_ID': train['customer_ID'], 'target': train[CFG.target], 'prediction': oof_predictions})\n    oof_df.to_csv(f'/content/drive/MyDrive/Amex/OOF/oof_lgbm_{CFG.boosting_type}_baseline_{CFG.n_folds}fold_seed{CFG.seed}.csv', index = False)\n    # Create a dataframe to store test prediction\n    test_df = pd.DataFrame({'customer_ID': test['customer_ID'], 'prediction': test_predictions})\n    test_df.to_csv(f'/content/drive/MyDrive/Amex/Predictions/test_lgbm_{CFG.boosting_type}_baseline_{CFG.n_folds}fold_seed{CFG.seed}.csv', index = False)\n    \nseed_everything(CFG.seed)\n# train, test = read_data()\ntrain_and_evaluate(train, test)","metadata":{},"execution_count":null,"outputs":[]}]}